【问题标题】:What are the differences between pickle.dump/load and pickle.dumps/loads?pickle.dump/load 与 pickle.dumps/loads
【发布时间】:2021-11-14 15:51:26
【问题描述】:

我已经开始了解用于对象序列化和反序列化的 pickle 模块。我知道 pickle.dump 用于将代码存储为位流(序列化),而 pickle.loads 正在将位流返回到 python 对象中。 (反序列化)。但是什么是转储和加载,它们与转储和加载有什么区别?我查看了文档,但我无法区分两者。

pickle.dumps(obj, protocol=None, *, fix_imports=True, buffer_callback=None) ;将对象 obj 的腌制表示返回为字节对象,而不是将其写入文件。

pickle.loads(data, /, *, fix_imports=True, encoding="ASCII", errors="strict", buffers=None) 返回对象的腌制表示数据的重构对象层次结构。 data 必须是字节类对象。

感谢任何帮助, 谢谢

【问题讨论】:

  • _ 而不是将其写入文件。_ 就是它的全部意义所在。 loaddump 读取或写入文件(或任何看起来像文件对象的对象)。如果你不想使用文件,loadsdumps 使用 bytes 对象。 “s”代表字符串,可以追溯到 python 2.x,其中字节和字符串大部分是相同的。

标签: python serialization deserialization pickle


【解决方案1】:

dumpdumps 的区别在于dump 将腌制对象写入打开的文件,dumps 将腌制对象返回为bytes。必须打开文件才能以二进制模式写入。对象的腌制版本与dumpdumps 完全相同。

所以,如果您对对象 obj 执行以下操作:

with open("pickle1", "wb") as f:
    pickle.dump(obj, f)
with open("pickle2", "wb") as f:
    f.write(pickle.dumps(obj))

您最终会得到两个内容完全相同的文件。

这同样适用于从打开(可读)文件对象加载 - load“unpickles”,loads 使用 bytes 对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    相关资源
    最近更新 更多