[英]File extension naming: .p vs .pkl vs .pickle
在读写泡菜文件时,我注意到一些片段使用.pkl
.p
一些完整的.pickle
。 有没有一种最pythonic的方式来做到这一点?
我目前的观点是,没有一个正确的答案,其中任何一个就足够了。 事实上,在运行pickle.load(open(filename, "rb"))
时写入awesome.pkl
或awesome.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.