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

der*_*n14 12 python naming-conventions pickle

在阅读和编写pickle文件时,我注意到一些片段使用.p其他片段,而一些片段.pkl则完整.pickle.这样做有一种最蟒蛇的方式吗?

我目前的观点是,没有一个正确的答案,任何这些都足够了.事实上,在运行时编写文件名awesome.pklawesome.sauce不会有所作为pickle.load(open(filename, "rb")).也就是说,文件扩展名只是一种实际上不会影响底层数据的约定.是对的吗?

额外奖励:如果我保存PNG图像myimage.jpg怎么办?会造成什么破坏?

Har*_*ton 9

扩展使得没有任何区别,因为" 泡椒协议 "运行每次.

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

(pickle协议是序列化格式)

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

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

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

来源,如果你想阅读更多

  • 是的,这都是真的,哈利,但据我了解,我没有回答OP的原始问题。OP有很强的直觉-正确-没有*技术*理由选择一种格式。但是他想知道是否还有更多的“ Pythonic”方式。换句话说,风格指南会建议什么?我是来这里找建议的。检查[pickle docs](https://docs.python.org/3/library/pickle.html),他们使用`.pickle`,但以我的经验,我见过`.p`和`.pkl更多。我在PEP中找不到任何明确讨论此内容的内容。:( (2认同)