用于序列化的两个模块
json:用于字符串和 Python 数据类型间进行转换
pickle: 用于 python 特有的类型和 python 的数据类型间进行转换
json 提供四个功能:dumps,dump,loads,load
pickle 提供四个功能:dumps,dump,loads,load
pickle 可以存储什么类型的数据呢?
所有 python 支持的原生类型:布尔值,整数,浮点数,复数,字符串,字节,None.
由任何原生类型组成的列表,元组,字典和集合.
函数,类,类的实例
pickle 模块中常用的方法有:
1. pickle.dump(obj, file, protocol=None,)
必填参数 obj 表示将要封装的对象
必填参数 file 表示 obj 要写入的文件对象,file 必须以二进制可写模式打开,即 "wb"
可选参数 protocol 表示告知 pickler 使用的协议,支持的协议有 0,1,2,3,默认的协议是添加在 Python 3 中的协议 3.
必填参数 file 必须以二进制可读模式打开,即 "rb",其他都为可选参数
Protocol version 0 is the original "human-readable" protocol and is backwards compatible with earlier versions of Python.
Protocol version 1 is an old binary format which is also compatible with earlier versions of Python.
Protocol version 2 was introduced in Python 2.3. It provides much more efficient pickling of new-style class es. Refer to PEP 307 for information about improvements brought by protocol 2.
Protocol version 3 was added in Python 3.0. It has explicit support for bytes objects and cannot be unpickled by Python 2.x. This is the default protocol, and the recommended protocol when compatibility with other Python 3 versions is required.
Protocol version 4 was added in Python 3.4. It adds support for very large objects, pickling more kinds of objects, and some data format optimizations. Refer to PEP 3154 for information about improvements brought by protocol 4.
2. pickle.load(file,*,fix_imports=True, encoding="ASCII", errors="strict")
3. pickle.dumps(obj):以字节对象形式返回封装的对象,不需要写入文件中
4. pickle.loads(bytes_object): 从字节对象中读取被封装的对象,并返回
pickle 模块可能出现三种异常:
1. PickleError:封装和拆封时出现的异常类,继承自 Exception
2. PicklingError: 遇到不可封装的对象时出现的异常,继承自 PickleError
3. UnPicklingError: 拆封对象过程中出现的异常,继承自 PickleError
应用:
# dumps功能
import pickle
data = ['aa', 'bb', 'cc']
# dumps 将数据通过特殊的形式转换为只有python语言认识的字符串
p_str = pickle.dumps(data)
print(p_str)
b'\x80\x03]q\x00(X\x02\x00\x00\x00aaq\x01X\x02\x00\x00\x00bbq\x02X\x02\x00\x00\x00ccq\x03e.
# loads功能
# loads 将pickle数据转换为python的数据结构
mes = pickle.loads(p_str)
print(mes)
['aa', 'bb', 'cc']
# dump功能
# dump 将数据通过特殊的形式转换为只有python语言认识的字符串,并写入文件
with open('D:/tmp.pk', 'w') as f:
pickle.dump(data, f)
# load功能
# load 从数据文件中读取数据,并转换为python的数据结构
with open('D:/tmp.pk', 'r') as f:
data = pickle.load(f)
来源: http://www.bubuko.com/infodetail-2463453.html