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'x80x04x955x00x00x00x00x00x00x00(x89x88Nx8cx03Tomx94Kx01Kx02x86x94]x94(Kx03Kx04ex8fx94(Kx05Kx06x90}x94(x8cx02k1x94Kx07x8cx02k2x94Kx08utx94.' 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对象
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)