pickle模块是python中用来将Python对象序列化和解序列化的一个工具。“pickling”是将Python对象转化为字节流的过程,而“unpickling”是相反的过程(将来自“binary file或bytes-like object”的字节流反转为对象的过程)。
pickle.HIGHEST_PROTOCOL
protocol
传给函数dump()
和dumps()
以及Pickler
构造器。pickle.DEFAULT_PROTOCOL
pickle.HIGHEST_PROTOCOL
小。目前默认的协议版本是3,协议3是专门为Python3设计的一种新的协议。pickle.dump(obj, file, protocol=None, *, fix_imports=True)
Pickler(file, protocol).dump(obj)
。protocol
参数是可选的,是一个整数,用来表示用到的协议版本。支持的协议为0到HIGHEST_PROTOCOL
。如果没有指定,就是默认的DEFAULT_PROTOCOL
。如果传入的是负数,那么HIGHEST_PROTOCOL
就被指定为协议版本。file
参数必须有一个write()
方法,该方法接收一个单字节参数。pickle.dumps(obj, protocol=None, *, fix_imports=True)
pickle.load(file, *, fix_imports=True, encoding="ASCII", errors="strict")
Unpickler(file).load()
。file
参数必须有两个方法:read()
方法接收一个整数参数和一个readlines()
方法不要求参数。两个方法都应该返回字节。pickle.loads(bytes_object, *, fix_imports=True, encoding="ASCII", errors="strict")
class pickle.Pickler(file, protocol=None, *, fix_imports=True)
class pickle.Unpickler(file, *, fix_imports=True, encoding="ASCII", errors="strict")
Pickler
类的dump()
方法、Unpickler
类的load()
方法。None
, True
, 和 False
__dict__
或调用__getstate__()
的结果是可序列化的。import pickle
# An arbitrary collection of objects supported by pickle.
# 支持序列化的字典
data = {
'a': [1, 2.0, 3, 4+6j],
'b': ("character string", b"byte string"),
'c': {None, True, False}
}
with open('data.pickle', 'wb') as f:
# Pickle the 'data' dictionary using the highest protocol available.
# 用最高协议版本序列化data字典,将其写入文件"data.pickle"中
pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)
# 经过上面的代码,已经在本地磁盘中写入了一个文件"data.pickle",现在我们将其读入,并将其解序列化
import pickle
with open('data.pickle', 'rb') as f:
# The protocol version used is detected automatically, so we do not
# have to specify it.
data = pickle.load(f)
print(data)
{'b': ('character string', b'byte string'), 'a': [1, 2.0, 3, (4+6j)], 'c': {False, True, None}}