pickle是支持将一个python对象转换成字节流,同时还能将对应的字节流逆操作,得到原来的对象的一个模块
import pickle
# 需要pickle的对象
dict = {
'jack ma': 'male',
'ma hua teng': 'male',
'lei jun': 'male',
'dong ming zhu': 'female'
}
# file_name为文件路径
file_name = r'F:\WebSpider' + 'test_pickle'
# pickling
data = pickle.dumps(obj=dict)
with open(file_name, mode='wb') as fp:
fp.write(data)
# dump 和 dumps的区别, 在于dump中可以传进参数file=文件路径
# pickle.dump(obj, file, protocol=None, *, fix_imports=True), 等价于Pickler(file, protocol).dump(obj).
# pickle.dumps(obj, protocol=None, *, fix_imports=True)
# loads() 将pickle后的文件逆操作获得原来的对象
with open(file_name, mode='rb') as fp:
data = pickle.loads(fp.read())
print(data)
# load() 和 loads()的区别:
# pickle.load(file, *, fix_imports=True, encoding="ASCII", errors="strict"), 等价于Unpickler(file).load()
# pickle.loads(bytes_object, *, fix_imports=True, encoding="ASCII", errors="strict")
需要了解的是dumps()中的参数protocol,目前已经有5种不同的协议。
常量:
pickle.HIGHEST_PROTOCOL (int, 代表目前最高可用的协议)
pickle.DEFAULT_PROTOCOL (int, 此时代表的是第三种协议,为py3所设计的)
其他的参数和方法没有深究
当pickle一个不可pickle的obj时,将触发PicklingError
详细请查阅文档