文件扩展名命名:.p、.pkl、.pickle

问题描述 投票:0回答:1

在读取和写入 pickle 文件时,我注意到一些片段使用了

.p
其他
.pkl
以及一些完整的
.pickle
。 有没有一种最Pythonic的方法来做到这一点?

我目前的观点是,没有一个正确的答案,其中任何一个就足够了。 事实上,在运行

awesome.pkl
时,写入
awesome.sauce
pickle.load(open(filename, "rb"))
的文件名不会产生任何影响。 也就是说,文件扩展名只是一种约定,实际上并不影响底层数据。 是这样吗?

奖励:如果我将 PNG 图像另存为

myimage.jpg
会怎么样? 这会造成什么严重破坏?

python naming-conventions pickle
1个回答
34
投票

扩展没有区别,因为“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 模块
  • 加载以
  • .json

    扩展名命名的文件。因此,它将遵循 pickle 模块 将加载 .pickle 扩展。 3 使用 .pickle 还可以最大限度地减少其他程序意外使用的可能性。

  • .p
  • 扩展名被其他一些程序使用,最引人注目的是 MATLAB 作为二进制运行时文件的后缀[来源:
one

two]。 一些冲突风险 .pkl 被一些不起眼的窗口“迁移向导装箱列表文件”[source

] 使用,并且是 Apple 提供的一种相当新的配置格式。

存在一些冲突风险 .pickle 仅用于 python pickling[source

]。

没有冲突风险

© www.soinside.com 2019 - 2024. All rights reserved.