繁体   English   中英

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

[英]File extension naming: .p vs .pkl vs .pickle

在读写泡菜文件时,我注意到一些片段使用.pkl .p一些完整的.pickle 有没有一种最pythonic的方式来做到这一点?

我目前的观点是,没有一个正确的答案,其中任何一个就足够了。 事实上,在运行pickle.load(open(filename, "rb"))时写入awesome.pklawesome.sauce的文件名不会有什么不同。 也就是说,文件扩展名只是一种约定,实际上并不影响底层数据。 那正确吗?

奖励:如果我将 PNG 图像另存为myimage.jpg会怎么样? 这会造成什么破坏?

扩展没有区别,因为“ The Pickle Protocol ”每次都运行。

也就是说,无论何时运行 pickle.dumps 或 pickle.loads,对象都会根据 pickle 协议进行序列化/反序列化。

(pickle 协议是一种序列化格式

pickle 协议是特定于 python 的(并且有多个版本)。 它只是真正为用户自己重新使用数据而设计的 -> 如果您将 pickle 文件发送给碰巧拥有不同版本的 pickle/Python 的其他人,那么该文件可能无法正确加载,您可能无法执行任何操作对于用另一种语言(如 Java)编写的腌制文件很有用。

所以,使用你喜欢的扩展,因为pickler忽略它们。

JSON是另一种更流行的数据序列化方式,与 pickle 不同,它也可以被其他语言使用——但是它不直接迎合 python,因此它不理解某些变量类型:/

来源如果你想阅读更多

编辑:虽然你可以使用任何名称,但你应该使用什么?

  • 1 如@Mike Williamson 所述。泡菜文档中使用了泡菜

  • 2 python 标准库json 模块加载以.json扩展名命名的文件。 所以它会跟随pickle 模块加载.pickle扩展。

  • 3 Using.pickle 还可以最大限度地减少其他程序意外使用的可能性。

.p扩展名被一些其他程序使用,最著名的是 MATLAB 作为二进制运行时文件的后缀 [来源:]。 一些冲突的风险

.pkl被一些晦涩的窗口“迁移向导装箱单文件”使用[来源]。 发生冲突的风险极低

.pickle仅用于 python pickling[ source ]。 没有冲突的风险

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM