美文网首页Python自动化运维
pickle- Python对象序列化

pickle- Python对象序列化

作者: 巧生于缘 | 来源:发表于2018-03-14 11:34 被阅读8次

pickle模块实现Python对象结构的二进制协议序列化和反序列化。pickling将Python对象层次结构转换为字节流的过程。unpickling是相反操作,将字节流(二进制文件类似字节的对象)转换回对象层次结构。

pickle与Python其他模块关系

marshal

  • marshal模块主要是为了支持Python的.pyc文件
  • pickle跟踪已经序列化的对象,不会对同一对象再次序列化
  • marshal不能用于序列化用户定义的类以及实例。pickle可以透明的保存和恢复类实例,但类定义必须可导入,且与存储对象位于同一模块
  • marshal序列化格式不能保证整个Python版本的移植。pickle序列化格式是保证不同Python版本向后兼容。

json

  • json是文本的序列化格式(输出unicode文本);pickle是二进制序列化格式
  • json可读;pickle不可
  • json在Python之外可互操作;pickle是Python特有的
  • json只能表示Python内置类型的一个子集,并且不包含自定义类; pickle可以代表大量的Python类型

模块接口

(1) pickle.dump(obj,file,protocol = None,*,fix_imports = True )
函数的功能:将obj对象序列化存入已经打开的file中。

  • obj:想要序列化的obj对象。
  • file:文件名称。
  • protocol:序列化使用的协议。如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本。

(2) pickle.dumps(obj,protocol = None,* ,fix_imports = True )
函数的功能:将obj对象序列作为bytes对象返回,而不是存入文件中。
(3) pickle.load(file,* ,fix_imports = True,encoding =“ASCII”,errors =“strict” )
函数的功能:将file中的对象序列化读出。
(4) pickle.loads(bytes_object,*,fix_imports = True,encoding =“ASCII”,errors =“strict” )
函数的功能:从bytes对象中读出序列化前的obj对象。

import pickle
list = [1,  2, 3, '123', {'key':100}]
 
dict = { 'x': [1, 2, 3, 4],  
         'y': ('a', 'b'),  
         'z': {'key':'var'}} 

with open('dataFile.txt', 'wb') as fw:
    pickle.dump(list, fw)
    pickle.dump(dict, fw)

with open('dataFile.txt', 'rb') as fr:
    data1 = pickle.load(fr)
    print(data1)
    data2 = pickle.load(fr)
    print(data2)

p = pickle.dumps(list)  
print( pickle.loads(p) )  
p = pickle.dumps(dict))  
print( pickle.loads(p) )

相关文章

网友评论

    本文标题:pickle- Python对象序列化

    本文链接:https://www.haomeiwen.com/subject/yzgxqftx.html