![](/img/trans.png)
[英]Is `pickle.dump(d, f)` equivalent to `f.write(pickle.dumps(d))`?
[英]What are the differences between pickle.dump/load and pickle.dumps/loads?
我已经开始了解用于 object 序列化和反序列化的 pickle 模块。
我知道pickle.dump
用于将代码存储为 stream 字节(序列化),而pickle.load
本质上是相反的,将 stream 字节变回 python object。(反序列化)。
但是什么是pickle.dumps
和pickle.loads
,它们与pickle.dump
和pickle.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。
dump
和dumps
之间的区别在于dump
将 pickled object 写入打开的文件,而dumps
将 pickled object 作为bytes
返回。 文件必须以二进制模式打开才能写入。 object 的 pickled 版本与dump
和dumps
完全相同。
因此,如果您对 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.