Ich muss ein kleines dict
Objekt auf der Festplatte speichern, dessen Schlüssel vom Typ sind str
und dessen Werte int
s sind, und es dann wiederherstellen . Etwas wie das:
{'juanjo': 2, 'pedro':99, 'other': 333}
Was ist die beste Option und warum? Serialisieren Sie es mit pickle
oder mit simplejson
?
Ich benutze Python 2.6.
simplejson
, Sie würden das eingebautejson
Modul verwenden (das genau die gleiche Schnittstelle hat).Antworten:
Wenn Sie keine Interoperabilitätsanforderungen haben (z. B. werden Sie die Daten nur mit Python verwenden) und ein Binärformat in Ordnung ist, wählen Sie cPickle , mit dem Sie Python-Objekte wirklich schnell serialisieren können.
Wenn Sie Interoperabilität oder ein Textformat zum Speichern Ihrer Daten wünschen, wählen Sie JSON (oder ein anderes geeignetes Format, abhängig von Ihren Einschränkungen).
quelle
cPickle
(oderpickle
) basierend auf Ihren Räumlichkeiten über JSON. Als ich Ihre Antwort zum ersten Mal las, dachte ich, der Grund könnte Geschwindigkeit gewesen sein, aber da dies nicht der Fall ist ... :)Für meine Serialisierung bevorzuge ich JSON gegenüber Pickle. Das Aufheben der Auswahl kann beliebigen Code ausführen, und die Verwendung
pickle
zum Übertragen von Daten zwischen Programmen oder zum Speichern von Daten zwischen Sitzungen ist eine Sicherheitslücke. JSON führt keine Sicherheitslücke ein und ist standardisiert, sodass Programme in verschiedenen Sprachen auf die Daten zugreifen können, falls dies jemals erforderlich sein sollte.quelle
Vielleicht finden Sie dies auch interessant, mit einigen Diagrammen zum Vergleichen: http://kovshenin.com/archives/pickle-vs-json-which-is-faster/
quelle
pickle
schlägtjson
aufint
,str
undfloat
.Wenn Sie sich hauptsächlich mit Geschwindigkeit und Platz befassen, verwenden Sie cPickle, da cPickle schneller als JSON ist.
Wenn Sie sich mehr mit Interoperabilität, Sicherheit und / oder Lesbarkeit befassen, verwenden Sie JSON.
Die Testergebnisse, auf die in anderen Antworten verwiesen wird, wurden 2010 aufgezeichnet, und die aktualisierten Tests 2016 mit dem cPickle- Protokoll 2 zeigen:
Reproduzieren Sie dies selbst mit diesem Kern , der auf dem Konstantin-Benchmark basiert, auf den in anderen Antworten verwiesen wird, aber cPickle mit Protokoll 2 anstelle von pickle und json anstelle von simplejson verwendet (da json schneller als simplejson ist ), z
Ergebnisse mit Python 2.7 auf einem anständigen Xeon-Prozessor 2015:
Python 3.4 mit Pickle-Protokoll 3 ist noch schneller.
quelle
JSON oder Gurke? Wie wäre es mit JSON und Gurke! Sie können verwenden
jsonpickle
. Es ist einfach zu bedienen und die Datei auf der Festplatte ist lesbar, da es sich um JSON handelt.http://jsonpickle.github.com/
quelle
Ich habe verschiedene Methoden ausprobiert und festgestellt, dass die Verwendung von cPickle mit dem Festlegen des Protokollarguments
cPickle.dumps(obj, protocol=cPickle.HIGHEST_PROTOCOL)
der Dump-Methode als: die schnellste Dump-Methode ist.Ausgabe:
quelle
Persönlich bevorzuge ich im Allgemeinen JSON, da die Daten für Menschen lesbar sind . Auf jeden Fall, wenn Sie etwas serialisieren müssen, das JSON nicht akzeptiert, verwenden Sie pickle.
Für die meisten Datenspeicher müssen Sie jedoch nichts Seltsames serialisieren, und JSON ist viel einfacher und ermöglicht es Ihnen, es immer in einem Texteditor zu öffnen und die Daten selbst zu überprüfen.
Die Geschwindigkeit ist gut, aber für die meisten Datensätze ist der Unterschied vernachlässigbar. Python ist im Allgemeinen sowieso nicht zu schnell.
quelle
pickle
ist mehr als doppelt so schnell wiejson
.100
Elementen in einer Liste ist der Unterschied für das menschliche Auge jedoch völlig vernachlässigbar. Definitiv anders bei der Arbeit mit größeren Datensätzen.