1.1.概述:
序列化是将对象的状态信息转换为可以存储或传输的形式的过程
1.2.cPickle与pickle
二者的功能几乎完全一致接口完全一样(不一样的很少使用到)
区别:cPickle用C语言编写, 执行速度比pickle快 1000倍
1.3.说明:
pickle可把python对象直接保存到文件,而不需要把它们转化成字符串,
也不用底层的文件访问操作把它们写入到一个二进制文件里。
pickle会创建一个 python 语言专用的二进制格式。
基本上不用考虑任何文件细节,它会帮你干净利落地完成文件读写操作。
唯一需要的只是一个合法的文件句柄
1.4.注意:
pickle数据格式是Python专用且不向后兼容,其他语言不能识别
但可用 Python 的 Json 包将数据转化为其他语言可以识别使用的格式
1.5.函数:
dump() 支持直接将 python 对象序列化并保存到文件
dumps() 则是将 python 对象序列化到内存
load() 用于从序列化的文件中加载并反序列化
loads() 直接将序列化对象反序列化
2.实例:
实例1:
import _pickle as cPickle
file=r'D:\tmp.txt'
obj = False,True,None,'Tom',(1,2),[3,4],set([5,6]),{'k1':7,'k2':8}
# dump 将 obj 直接序列化并保存到 a.txt
with open(file,'wb') as f:
cPickle.dump(obj,f)#将obj直接序列化并保存到文件
with open(file,'rb') as f:#将文件中的序列化数据转为python对象
data=cPickle.load(f)
print(data)
# (False, True, None, 'Tom', (1, 2), [3, 4], {5, 6}, {'k1': 7, 'k2': 8})
实例2:
b = cPickle.dumps(obj)#将obj直接序列化但不保存到文件
# b'\x80\x04\x955\x00\x00\x00\x00\x00\x00\x00(\x89\x88N\x8c\x03Tom\x94K\x01K\x02\x86\x94]\x94(K\x03K\x04e\x8f\x94(K\x05K\x06\x90}\x94(\x8c\x02k1\x94K\x07\x8c\x02k2\x94K\x08ut\x94.'
cPickle.loads(b)#将内存中的序列化数据转为python对象
#(False, True, None, 'Tom', (1, 2), [3, 4], {5, 6}, {'k1': 7, 'k2': 8})
3.备注:
dump(obj, file, protocol=None, *, fix_imports=True, buffer_callback=None)
用途:将obj的pickled表示形式写入到打开的文件对象文件中
参数:
file:文件对象(有write()二进制),io.BytesIO实例
protocol=4 可选协议0-5
fix_imports=True,and protocol<3,pickle会尝试
将Python3名称映射到Python2,数据流就可用Python2读
buffer_callback=None
默认缓冲区视图将被序列化作为泡菜流的一部分
buffer_callback is not None and (protocol is None | protocol< 5)错误
dumps(obj, protocol=None, *, fix_imports=True, buffer_callback=None)
用途:返回对象的腌制的字节表示对象
load(file, *, fix_imports=True, encoding='ASCII', errors='strict', buffers=())
用途:将文件数据反序列化为python对象
参数:
file:文件对象,BytesIO(必须有read(int),readline(无参数)都应该返回字节数)
# 以下参数用于控制泡菜流的Python 2兼容性支持
fix_imports=True将Python2名称映射到Python3中
encoding='ASCII'编码和错误告诉泡菜如何解码8位Python2字符串
可是'bytes'来读取这些8位字符串实例作为字节对象
errors='strict'
buffers=()
loads(data, /, *, fix_imports=True, encoding='ASCII', errors='strict', buffers=())
用途:将序列化数据反序列化为python对象
|