2009-12-04 7 views
13

Ich habe ein kleines Python-Skript von mir erstellt. Ich habe die Pickle-Datei unter Linux gespeichert und dann unter Windows und dann wieder unter Linux verwendet, aber jetzt funktioniert diese Datei nicht mehr unter Linux, aber sie funktioniert perfekt unter Windows. Is ist so, dass Python coss-Plattform ist, aber die Gurke-Datei ist nicht. Gibt es eine Lösung für dieses ???Ist die Beizdatei von Python plattformübergreifend?

+32

Python Pickle möglicherweise stachelig. Pickle-Plattform-Probleme potenziell vermeidbar. Präsentieren Sie bitte einen möglichen Vorschlag zur Problemprävention. – aehiilrs

Antwort

23

Pythons Beize ist perfekt plattformübergreifend.

Dies ist wahrscheinlich auf EOL (End-Of-Line) Unterschiede zwischen Windows und Linux zurückzuführen. Stellen Sie sicher, dass Sie Ihre Pickle-Dateien im Binärmodus sowohl beim Schreiben als auch beim Lesen öffnen, indem Sie die Modi open(), wb bzw. rb verwenden.

Hinweis: Das Übernehmen von Pickles zwischen verschiedenen Python-Versionen kann zu Problemen führen. Versuchen Sie daher, auf beiden Plattformen dieselbe Version zu verwenden.

+0

'pickle' ist [garantiert rückwärtskompatibel] (http://docs.python.org/2/library/pickle.html#relationship-to-other-python-modules). Ich nehme an, dies bedeutet, dass neuere Versionen Gurken aus älteren Versionen lesen, aber ältere Versionen möglicherweise nicht Gurken aus neueren Versionen lesen können. – max

0

Sie könnten json anstelle von pickle verwenden. Wenn es Ihre Daten speichern kann, wissen Sie, dass es plattformübergreifend ist.

+0

Nicht downvoting, aber mit json für diese Situation scheint irgendwie peinlich. – ChristopheD

+1

Es hängt wirklich davon ab, was er spart. Wenn es nur Listen von Zahlen und Strings gibt, ist JSON großartig. Wenn es Wörterbücher und Klasseninstanzen sind, nicht so sehr. – steveha

+0

Ich speichere Klasseninstanzen – vikithakar

9

Das pickle Modul supports several different data formats. Wenn Sie ein bestimmtes Pickle-Format angeben, anstatt den Standardwert (0) zu verwenden, treten möglicherweise Probleme mit plattformübergreifenden Binärdateien auf. Sie können normale ASCII-Pickle-Dateien verwenden, indem Sie das Protokoll 0 angeben.

4

Pickle sollte plattformübergreifend sein, es gibt Versionierungs-/Protokollprobleme (siehe http://docs.python.org/library/pickle.html#data-stream-format), aber im Allgemeinen, wenn Sie die gleiche Version von Python auf Ihren Windows verwenden und Unix-Boxen sollten sie interoperabel sein.

Wenn Sie Gurke als Datentransportmechanismus sind, möchten Sie vielleicht weniger Implementierung spezifische Formate für die Datenspeicherung, wie json, xml, csv, yaml usw.

0

Eine interessante Idee zu prüfen, ausprobieren ist PyON (Python-Objekt Notation). Die aktuelle Version scheint nach meinen Tests zumindest für einfache Fälle zu funktionieren. Es scheint Meinungsverschiedenheiten über Mailinglisten zu geben, ob das Projekt eine gute Idee ist.

Verwandte Themen