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?
Antwort
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.
'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
Sie könnten json
anstelle von pickle
verwenden. Wenn es Ihre Daten speichern kann, wissen Sie, dass es plattformübergreifend ist.
Nicht downvoting, aber mit json für diese Situation scheint irgendwie peinlich. – ChristopheD
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
Ich speichere Klasseninstanzen – vikithakar
Vielleicht öffnen Sie die Datei nicht im Binärmodus? Siehe this stackoverflow question
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.
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.
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.
- 1. Wie liest man die Beizdatei?
- 2. Ist SQLite wirklich plattformübergreifend?
- 3. Ändern der Prozesspriorität in Python, plattformübergreifend
- 4. Behandlung von C++ - Abhängigkeiten (plattformübergreifend)
- 5. Lesen einer Beizdatei (PANDAS Python Data Frame) in R
- 6. Wie man die Zeit verringert, die man braucht, um eine Beizdatei in Python zu laden
- 7. Dinge, die plattformübergreifend verhindern Ihre Java-Webanwendung
- 8. Wie speichere ich Desktop-Anwendungsdaten plattformübergreifend für Python?
- 9. Guter HTML/CSS/PHP Editor, der kostenlos und plattformübergreifend ist?
- 10. iOS- und OSX-Dokumentpakete plattformübergreifend
- 11. Wie starte ich mercurial-Abfragen von C++ (plattformübergreifend)?
- 12. Wie ist der aktuelle Stand der Unterstützung für "thread_local" plattformübergreifend?
- 13. Java FMJ ist nicht plattformübergreifend? Wie kann es behoben werden?
- 14. Loggen in ein temporäres Verzeichnis plattformübergreifend
- 15. Plattformübergreifend, Interaktive textbasierte Schnittstelle mit Befehlsabschluss
- 16. vimrc wird plattformübergreifend und mit Dropbox synchronisiert.
- 17. Wie sende ich E-Mails von meiner Phonegap-Anwendung (plattformübergreifend)?
- 18. Mehrere Objekte in der Beizdatei speichern und laden?
- 19. Kann ich den Django-Datenbankpfad (für sqlite3) "plattformübergreifend" machen?
- 20. Wie drucke ich auf dem Standarddrucker des Betriebssystems in Python 3 (plattformübergreifend)?
- 21. Ist es möglich, Java-Methoden (oder Objekte aufzurufen) mit .NET plattformübergreifend aufzurufen?
- 22. Bluetooth LE App, wie man es plattformübergreifend baut (iOS-Android)?
- 23. Wie organisieren Sie den plattformübergreifend ausgerichteten Web-Service?
- 24. Welche Optionen muss ich SMTP-Client in C++ schreiben (plattformübergreifend)
- 25. ist die Implementierung von Ctypes (Python) in Jruby?
- 26. Was ist die umgekehrte Funktion von Zip in Python?
- 27. Python - Was ist die Verwendung von wenn True:?
- 28. Was ist die Verwendung von * in Python-Funktionsdefinition?
- 29. Was ist die zeitliche Komplexität von zip() in Python?
- 30. Wie kann duplikierter Code plattformübergreifend am besten gehandhabt werden?
Python Pickle möglicherweise stachelig. Pickle-Plattform-Probleme potenziell vermeidbar. Präsentieren Sie bitte einen möglichen Vorschlag zur Problemprävention. – aehiilrs