2017-02-12 78 views
4

阅读和写作泡菜文件时,我注意到有些代码片段使用.p其他.pkl和一些完整的.pickle。有没有一个最pythonic这样做?文件扩展命名:.p vs .pkl vs .pickle

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

奖励:如果我救了一个PNG图像myimage.jpg?会造成什么破坏?

回答

2

扩展使得没有区别因为“泡椒协议”运行每次。根据pickle协议

也就是说每当pickle.dumps或pickle.loads运行的对象被序列化/非串行化。

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

pickle协议是特定蟒(也有几个版本)。它是唯一真正专为用户重新使用数据本身 - >如果您发送的腌文件给别人谁碰巧有泡菜的不同版/ Python的那么该文件可能无法正确加载,你大概可以在Java等另一种语言中对该pickle文件做任何有用的操作。

那么,用什么扩展你喜欢,因为皮克勒忽略他们。

JSON是串行化的数据的另一个更普遍的方式,它也可以通过不同于泡菜语言中使用 - 但是它不直接迎合蟒等某些变量类型不被它的理解:/

source如果你想阅读更多