繁体   English   中英

pickle.dump/load 和 pickle.dumps/loads 之间有什么区别?

[英]What are the differences between pickle.dump/load and pickle.dumps/loads?

我已经开始了解用于 object 序列化和反序列化的 pickle 模块。

我知道pickle.dump用于将代码存储为 stream 字节(序列化),而pickle.load本质上是相反的,将 stream 字节变回 python object。(反序列化)。

但是什么是pickle.dumpspickle.loads ,它们与pickle.dumppickle.load有什么区别? 我看过文档,但我无法区分两者。

从文档中

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

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

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

因此,如果您对 object obj执行以下操作:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM