我已经创建了一个我的小型 python 脚本。我在 Linux 上保存了 pickle 文件,然后在 Windows 上使用它,然后在 Linux 上再次使用它,但现在该文件在 Linux 上无法运行,但在 Windows 上运行良好。是这样的,python 是 coss 平台的,但 pickle 文件不是。这个有什么解决办法???
6 回答
Python 的 pickle 是完全跨平台的。
这可能是由于 Windows 和 Linux 之间的 EOL(行尾)差异造成的。确保在写入和读取它们时都以二进制模式打开泡菜文件,分别使用 open() 的“wb”和“rb”模式。
注意:在不同版本的 Python 之间传递 pickle 可能会造成麻烦,因此请尽量在两个平台上使用相同的版本。
该pickle
模块支持几种不同的数据格式。如果您指定特定的 pickle 格式而不是使用默认值 (0),您可能会遇到跨平台二进制文件问题。您可以通过指定协议 0 来使用纯 ASCII 泡菜文件。
也许您没有以二进制模式打开文件?看到这个stackoverflow问题
Pickle 应该是跨平台的,存在版本控制/协议问题,(请参阅http://docs.python.org/library/pickle.html#data-stream-format)但一般来说,如果您使用的是相同版本的python 在你的 windows 和 unix 盒子上,它们应该是可互操作的。
如果您使用 pickle 作为数据传输机制,您可能需要考虑较少实现特定格式的数据存储,例如 json、xml、csv、yaml 等。
您可以使用json
而不是pickle
. 如果它可以保存您的数据,您就知道它是跨平台的。
一个有趣的尝试是PyON(Python 对象表示法)。根据我的测试,当前版本似乎至少适用于简单的情况。不过,对于这个项目是否是一个好主意,邮件列表似乎存在一些分歧。