在阅读和撰写pickle文件时,我注意到某些代码段使用.p
个其他.pkl
和一些.pickle
。有一种最蟒蛇的方式吗?
我目前的观点是,没有一个正确的答案,任何这些都足够了。事实上,编写awesome.pkl
或awesome.sauce
的文件名在运行pickle.load(open(filename, "rb"))
时会有所不同。也就是说,文件扩展名只是一个实际上不会影响底层数据的约定。是吗?
额外奖励:如果我将PNG图像保存为myimage.jpg
怎么办?会造成什么破坏?
答案 0 :(得分:8)
扩展程序会使没有差异,因为每次都会运行“ The Pickle Protocol ”。
也就是说,无论何时运行pickle.dumps或pickle.loads,对象都会根据pickle协议进行序列化/非序列化。
(泡菜协议是序列化格式)
pickle协议特定于python (并且有多个版本)。它只是为用户自己重新使用数据而设计的 - >如果您将腌制文件发送给碰巧拥有不同版本 pickle / Python的其他人,那么该文件可能无法正确加载,您可能无法做任何有用的事情使用另一种语言(例如Java)的那个pickle文件。
因此,请使用您喜欢的扩展程序,因为 pickler 将忽略。
JSON 是另一种比较流行的数据序列化方式,它也可以被其他语言用于与pickle不同 - 但是它不能直接用于python等等某些变量类型不被它理解:/
source如果你想了解更多