在读取和写入 pickle 文件时,我注意到一些片段使用了
.p
其他 .pkl
以及一些完整的 .pickle
。 有没有一种最Pythonic的方法来做到这一点?
我目前的观点是,没有一个正确的答案,其中任何一个就足够了。 事实上,在运行
awesome.pkl
时,写入 awesome.sauce
或 pickle.load(open(filename, "rb"))
的文件名不会产生任何影响。 也就是说,文件扩展名只是一种约定,实际上并不影响底层数据。 是这样吗?
奖励:如果我将 PNG 图像另存为
myimage.jpg
会怎么样? 这会造成什么严重破坏?
扩展没有区别,因为“Pickle Protocol”每次都会运行。
也就是说,每当 pickle.dumps 或 pickle.loads 运行时,对象都会根据 pickle 协议进行序列化/取消序列化。
(pickle协议是一种序列化格式)
pickle 协议是 python 特定的(并且有几个版本)。它实际上只是为用户自己重复使用数据而设计的 -> 如果您将 pickle 文件发送给恰好拥有“不同版本”pickle/Python 的其他人,那么该文件可能“无法正确加载”,而您可能可以不要用另一种语言(如 Java)对该 pickle 文件做任何有用的事情。 所以,使用你喜欢的扩展,因为
pickler会忽略它们。 JSON是另一种更流行的序列化数据的方式,与pickle不同,它也可以被
其他语言使用——但是它不直接迎合Python,因此某些变量类型不能被它理解:/ 来源如果您想了解更多
编辑:虽然您可以使用任何名称,但您
应该使用什么? 1 正如 @Mike Williamson 提到的 .pickle 用于 pickle 文档
2 python 标准库
json 模块扩展名命名的文件。因此,它将遵循 pickle 模块 将加载 .pickle 扩展。 3 使用 .pickle 还可以最大限度地减少其他程序意外使用的可能性。
、two]。 一些冲突风险 .pkl 被一些不起眼的窗口“迁移向导装箱列表文件”[source
] 使用,并且是 Apple 提供的一种相当新的配置格式。 ]。