21

私の小さなpythonスクリプトを作成しました。Linux で pickle ファイルを保存し、それを Windows で使用してから、再び Linux で使用しましたが、そのファイルは Linux では機能しませんが、Windows では完全に機能しています。pythonはcoss-platformですが、ピクルファイルはそうではありません。これに対する解決策はありますか?

4

6 に答える 6

36

Python の pickle は完全にクロスプラットフォームです。

これは、Windows と Linux の EOL (End-Of-Line) の違いによるものと考えられます。pickle ファイルは、open() の "wb" モードと "rb" モードをそれぞれ使用して、書き込み時と読み取り時の両方でバイナリ モードで開くようにしてください。

注: 異なるバージョンの Python 間で pickle を渡すと問題が発生する可能性があるため、両方のプラットフォームで同じバージョンを使用するようにしてください。

于 2009-12-05T01:45:36.520 に答える
12

このpickleモジュールは、いくつかの異なるデータ形式をサポートしています。デフォルト (0) を使用する代わりに特定の pickle 形式を指定している場合、クロスプラットフォームのバイナリ ファイルの問題が発生する可能性があります。プロトコル 0 を指定すると、プレーン ASCII の pickle ファイルを使用できます。

于 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を参照)。 Windows および UNIX ボックスで python を使用する場合、それらは相互運用可能である必要があります。

pickle をデータ トランスポート メカニズムとして使用している場合は、json、xml、csv、yaml など、実装の少ない特定の形式のデータ ストレージを検討することをお勧めします。

于 2009-12-04T21:05:56.480 に答える
1

jsonの代わりに使用できますpickle。それがあなたのデータを保存することができるなら、あなたはそれがクロスプラットフォームであることを知っています。

于 2009-12-04T20:44:37.747 に答える
0

試してみるべき興味深いアイデアの 1 つは、PyON (Python Object Notation) です。私のテストによると、現在のバージョンは少なくとも単純なケースでは機能するようです。ただし、このプロジェクトが良いアイデアかどうかについては、メーリング リストで意見の相違があったようです。

于 2009-12-04T22:50:47.463 に答える