python跨平台的pickle文件?

时间:2009-12-04 20:39:58

标签: python file-io pickle

我创建了一个小的python脚本。我在Linux上保存了pickle文件,然后在Windows上使用它,然后再次在Linux上使用它,但现在该文件在Linux上无法运行,但它在Windows上运行得很好。 是的,python是coss-platform但是pickle文件不是。 有没有解决这个问题?

6 个答案:

答案 0 :(得分:25)

Python的泡菜完全是跨平台的。

这可能是由于Windows和Linux之间的EOL(End-Of-Line)差异造成的。确保在编写文件时和阅读文件时以二进制模式打开文件,分别使用open()的“wb”和“rb”模式。

注意:在不同版本的Python之间传递pickle可能会带来麻烦,因此请尝试在两个平台上使用相同的版本。

答案 1 :(得分:9)

pickle模块supports several different data formats。如果要指定特定的pickle格式而不是使用默认值(0),则可能会遇到跨平台的二进制文件问题。您可以通过指定协议0来使用纯ASCII pickle文件。

答案 2 :(得分:4)

也许你不以二进制模式打开文件?见this stackoverflow question

答案 3 :(得分:4)

Pickle应该是跨平台的,有版本控制/协议问题,(参见http://docs.python.org/library/pickle.html#data-stream-format)但一般来说,如果你在windows和unix盒子上使用相同版本的python,它们应该是可互操作的。

如果您使用pickle作为数据传输机制,您可能需要考虑较少实现的数据存储格式,例如json,xml,csv,yaml等。

答案 4 :(得分:0)

您可以使用json代替pickle。如果它可以保存您的数据,您就知道它是跨平台的。

答案 5 :(得分:0)

尝试的一个有趣的想法是PyON(Python Object Notation)。根据我的测试,当前版本似乎至少对于简单的情况起作用。但是,在邮件列表上似乎存在一些不同意见,不管该项目是否是一个好主意。