泡菜和泡菜有什么区别?Dump /load和pickle.dumps/loads?



我已经开始学习用于对象序列化和反序列化的pickle模块。

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

pickle.dumpspickle.loads是什么,它们与pickle.dumppickle.load有什么区别?我已经看了文档,但是我很难区分这两者。

来自文档:

泡菜。dump (obj, protocol=None, *, fix_imports=True, buffer_callback=None);返回对象obj的pickle表示形式为bytes对象,而不是将其写入文件。

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

dumpdumps的区别在于,dump将pickle对象写入打开的文件,而dumps将pickle对象作为bytes返回。该文件必须以二进制模式打开才能写入。对象的pickle版本与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对象。

相关内容

  • 没有找到相关文章

最新更新