私の小さなpythonスクリプトを作成しました。Linux で pickle ファイルを保存し、それを Windows で使用してから、再び Linux で使用しましたが、そのファイルは Linux では機能しませんが、Windows では完全に機能しています。pythonはcoss-platformですが、ピクルファイルはそうではありません。これに対する解決策はありますか?
6 に答える
Python の pickle は完全にクロスプラットフォームです。
これは、Windows と Linux の EOL (End-Of-Line) の違いによるものと考えられます。pickle ファイルは、open() の "wb" モードと "rb" モードをそれぞれ使用して、書き込み時と読み取り時の両方でバイナリ モードで開くようにしてください。
注: 異なるバージョンの Python 間で pickle を渡すと問題が発生する可能性があるため、両方のプラットフォームで同じバージョンを使用するようにしてください。
このpickle
モジュールは、いくつかの異なるデータ形式をサポートしています。デフォルト (0) を使用する代わりに特定の pickle 形式を指定している場合、クロスプラットフォームのバイナリ ファイルの問題が発生する可能性があります。プロトコル 0 を指定すると、プレーン ASCII の pickle ファイルを使用できます。
たぶんあなたはバイナリモードでファイルを開かないのですか?このstackoverflowの質問を参照してください
Pickle はクロスプラットフォームである必要があり、バージョン管理/プロトコルの問題があります ( http://docs.python.org/library/pickle.html#data-stream-formatを参照)。 Windows および UNIX ボックスで python を使用する場合、それらは相互運用可能である必要があります。
pickle をデータ トランスポート メカニズムとして使用している場合は、json、xml、csv、yaml など、実装の少ない特定の形式のデータ ストレージを検討することをお勧めします。
json
の代わりに使用できますpickle
。それがあなたのデータを保存することができるなら、あなたはそれがクロスプラットフォームであることを知っています。
試してみるべき興味深いアイデアの 1 つは、PyON (Python Object Notation) です。私のテストによると、現在のバージョンは少なくとも単純なケースでは機能するようです。ただし、このプロジェクトが良いアイデアかどうかについては、メーリング リストで意見の相違があったようです。