欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

python3中

时间:2023-08-25

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 cPicklefile=r'D:tmp.txt'obj = False,True,None,'Tom',(1,2),[3,4],set([5,6]),{'k1':7,'k2':8}# dump 将 obj 直接序列化并保存到 a.txtwith 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对象

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。