我已经开始学习用于对象序列化和反序列化的pickle模块。
我知道pickle.dump
用于将代码存储为字节流(序列化),而pickle.load
本质上是相反的,将字节流转换回python对象。(反序列化)。
但pickle.dumps
和pickle.loads
是什么,它们与pickle.dump
和pickle.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必须是类字节的对象。
dump
和dumps
的区别在于,dump
将pickle对象写入打开的文件,而dumps
将pickle对象作为bytes
返回。该文件必须以二进制模式打开才能写入。对象的pickle版本与dump
和dumps
完全相同。
那么,如果您对对象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
对象。