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) )
网友评论