python3 中

python3 中,第1张

python3 中
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对象

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5720839.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存