krm*_*ogi 9 python serialization pickle deserialization
我已经开始了解用于对象序列化和反序列化的 pickle 模块。
我知道它pickle.dump用于将代码存储为字节流(序列化),pickle.load本质上是相反的,将字节流转回Python对象。(反序列化)。
但什么是pickle.dumps和,它们pickle.loads之间有什么区别?我查看了文档,但我无法区分两者。pickle.dumppickle.load
从文档中:
pickle.dumps(obj,protocol=None,*,fix_imports=True,buffer_callback=None); 将对象 obj 的 pickle 表示形式返回为字节对象,而不是将其写入文件。
pickle.loads(data,/,*,fix_imports = True,encoding =“ASCII”,errors =“strict”,buffers = None)返回对象的腌制表示数据的重构对象层次结构。数据必须是类似字节的对象。
sj9*_*126 21
dump和之间的区别dumps在于,dump将 pickled 对象写入打开的文件,并将dumpspickled 对象返回为bytes. 该文件必须以二进制模式打开才能写入。dump该对象的 pickle 版本与和完全相同dumps。
因此,如果您对 object 执行了以下操作obj:
with open("pickle1", "wb") as f:
pickle.dump(obj, f)
with open("pickle2", "wb") as f:
f.write(pickle.dumps(obj))
Run Code Online (Sandbox Code Playgroud)
您最终会得到两个内容完全相同的文件。
这同样适用于加载 -load从打开的(可读)文件对象“unpickles”,并loads使用bytes对象。