21

我已经创建了一个我的小型 python 脚本。我在 Linux 上保存了 pickle 文件,然后在 Windows 上使用它,然后在 Linux 上再次使用它,但现在该文件在 Linux 上无法运行,但在 Windows 上运行良好。是这样的,python 是 coss 平台的,但 pickle 文件不是。这个有什么解决办法???

4

6 回答 6

36

Python 的 pickle 是完全跨平台的。

这可能是由于 Windows 和 Linux 之间的 EOL(行尾)差异造成的。确保在写入和读取它们时都以二进制模式打开泡菜文件,分别使用 open() 的“wb”和“rb”模式。

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

于 2009-12-05T01:45:36.520 回答
12

pickle模块支持几种不同的数据格式。如果您指定特定的 pickle 格式而不是使用默认值 (0),您可能会遇到跨平台二进制文件问题。您可以通过指定协议 0 来使用纯 ASCII 泡菜文件。

于 2009-12-04T21:02:51.780 回答
4

也许您没有以二进制模式打开文件?看到这个stackoverflow问题

于 2009-12-04T20:46:38.800 回答
4

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

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

于 2009-12-04T21:05:56.480 回答
1

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

于 2009-12-04T20:44:37.747 回答
0

一个有趣的尝试是PyON(Python 对象表示法)。根据我的测试,当前版本似乎至少适用于简单的情况。不过,对于这个项目是否是一个好主意,邮件列表似乎存在一些分歧。

于 2009-12-04T22:50:47.463 回答