2009-12-04 140 views
13

我已經創建了一個我的小python腳本。我在Linux上保存了pickle文件,然後在windows上使用它,然後在Linux上再次使用它,但現在該文件在Linux上不起作用,但它在Windows上完美工作。 是這樣的,python是coss平臺,但pickle文件不是。 有沒有解決這個問題的方法?是python跨平臺的pickle文件嗎?

+32

蟒蛇醃菜可能有刺。泡菜平臺問題潛在可預防。請提出可能的問題預防建議。 – aehiilrs 2009-12-04 23:48:34

回答

23

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

這可能是由於Windows和Linux之間的EOL(行結束)差異造成的。確保使用open()的「wb」和「rb」模式分別在寫入和閱讀時以二進​​制模式打開pickle文件。

注意:在不同版本的Python之間傳遞pickle可能會導致麻煩,因此請嘗試在兩個平臺上使用相同的版本。

+0

'pickle' [保證是「向後兼容」](http://docs.python.org/2/library/pickle.html#relationship-to-other-python-modules)。我認爲這意味着更新的版本將會讀取舊版本的醬菜,但舊版本可能無法從新版本讀取醬菜。 – max 2012-12-28 18:12:34

0

您可以使用json而不是pickle。如果它可以保存你的數據,你就知道它是跨平臺的。

+0

不是downvoting,但使用json的這種情況似乎有點尷尬。 – ChristopheD 2009-12-04 20:55:30

+1

這真的取決於他正在保存的內容。如果它是所有的數字和字符串列表,JSON非常棒。如果是字典和類實例,不是那麼多。 – steveha 2009-12-05 00:08:06

+0

我正在保存類實例 – vikithakar 2009-12-14 16:38:13

9

pickle模塊supports several different data formats。如果你指定一個特定的pickle格式而不是默認的(0),你可能會遇到跨平臺的二進制文件問題。你可以通過指定協議0來使用純ASCII的pickle文件。

4

Pickle應該是跨平臺的,有版本/協議問題(見http://docs.python.org/library/pickle.html#data-stream-format),但是一般來說如果你在你的windows上使用相同版本的python和unix框,它們應該可以互操作。

如果您使用泡菜作爲數據傳輸機制,你可能要考慮用於數據存儲的實現少特定的格式,如JSON,XML,CSV,YAML等

0

一個有趣的想法,嘗試一下是PyON(Python對象表示法)。根據我的測試,目前的版本似乎至少適用於簡單的情況。不過,郵件列表似乎存在一些分歧,不管該項目是否是一個好主意。