欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python学习笔记(八)

程序员文章站 2022-07-09 23:27:05
...

一、对象持久化

(一)pickle 模块

1、概述

pickle模块为Python对象结构的序列化和反序列化实现了一个基本但强大的算法。 “Pickling”是将Python对象层次结构转换为字节流的过程,“unpickling”是相反的操作,即字节流转换回对象层次结构。

2、常用方法

(1)序列化为字符串
pickle.dumps(obj) 将对象序列化为字符串
pickle.loads(str) 将字符串反序列化为对象

import pickle

p = {"name":"Tom", "age":18}

# 对象序列化为字符串
str_p = pickle.dumps(p)
print(str_p)

# 字符串反序列化为对象
p_tmp = pickle.loads(str_p)
print(p_tmp)

(2)序列化到文件
pickle.dump(obj, file) 将对象序列化到文件
pickle.load(file) 将文件反序列化为对象

import pickle

p = {"name":"Tom", "age":18}

# 对象序列化到文件
pickle.dump(p, open("a.txt", "wb"))

# 文件反序列化为对象
p_tmp = pickle.load(open("a.txt", "rb"))
print(p_tmp)

(二)shelve 模块

1、概述

shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式

2、常用方法
(1)创建shelve文件
db = shelve.open('path')

(2)序列化到文件
db['key'] = obj

(3)序列化的对象数量
len(db)

(4)删除序列化内容
del db['key']

(三)对比 pickle 和 shelve

pickle一个文件只能很方便的序列一个对象,如果需要一个文件序列化多个对象的话使用shelve模块,因为shelve模块是k, v型的,可以更方便一个文件存储多个对象

二、字符串

(一)类型

  1. str               字符串
  2. bytes           字节
  3. bytearray    字节数组

(二)基础概念

名称 概述
字符集 又称为编码字符集,
是一个包含字符表中每一个字符和对应的整数映射关系的集合。
码位值 一个字符在某个字符集中的映射的值,一般是一个整数。
字符编码 是把一个码位值转换为用于存储和传输的2进制序列的方式。
编码 转换字符为字节形式
解码 字节形式转换为字符

(三)字符编码

1、ASCII

存储在一个Byte
0~127

2、latin-1

存储在一个Byte
128~255

3、UTF-8

可变字节
0~127:使用单字节
128~2047:双字节存储
大于 2047:3~4Byte

4、UTF-16

2Byte存储字符(另加2Byte作为标识)

5、UTF-32(4Byte)


(四)内置函数

1、ord():获取字符码值

print(ord('a'))  # 97

2、chr():获取码值对应的字符

print(chr(97))  # a

3、str.encode(‘编码’):将特定字符串编码

s = "abc"

print(s.encode("utf8"))

4、bytes.decode(‘编码’):将字符编码解码为字符文本

s = "abc"
b = s.encode("utf8")
print(b)

print(b.decode("utf8"))

(五)类型转换

1、转化为bytes
方法1: 手动声明 b""
方法2: 字符串编码 str.encode()
方法2: 构造函数 bytes()

2、转换为bytearray
构造函数: bytearray('字符串','字符编码')

3、转换为字符串
bytes.decode('字符编码')
bytearray.decode('字符编码')

(六)BOM 处理

1、简介

字节顺序标记(英语:byte-order mark,BOM)是一个有特殊含义的统一码字符,码点为U+FEFF。当以UTF-16或UTF-32来将UCS/统一码字符所组成的字符串编码时,这个字符被用来标示其字节序。经常被用于区分是否为UTF编码。

2、使用(添加或不显示标记)
open('文件名','打开方式',encoding="字符编码-sig")

with open("a.txt", "w", encoding="utf-8-sig") as f:
	f.write("Hello world")

with open("a.txt", "r", encoding="utf-8-sig") as f:
	print(f.read())