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