Ich bin es gewohnt, Daten mithilfe von CSV-Dateien in Python ein- und auszublenden, aber dies birgt offensichtliche Herausforderungen. Irgendwelche Ratschläge zu einfachen Möglichkeiten, ein Wörterbuch (oder Wörterbuchsätze) in einer JSON- oder Pck-Datei zu speichern? Beispielsweise:
data = {}
data ['key1'] = "keyinfo"
data ['key2'] = "keyinfo2"
Ich würde gerne wissen, wie man dies speichert und wie man es dann wieder einlädt.
Antworten:
Pickle speichern:
Weitere Informationen zum Argument finden Sie in der Dokumentation zum Pickle-Modul
protocol
.Essiggurkenladung :
JSON speichern:
Geben Sie zusätzliche Argumente wie
sort_keys
oderindent
an, um ein hübsches Ergebnis zu erzielen. Das Argument sort_keys sortiert die Schlüssel alphabetisch und durch Einrücken wird Ihre Datenstruktur mitindent=N
Leerzeichen eingerückt .JSON laden:
quelle
pickle.dump
. Wenn die Datei nicht für Menschen lesbar sein muss, kann dies die Dinge erheblich beschleunigen.json.dump(data, fp, sort_keys=True, indent=4)
. Weitere Informationen finden Sie hierpickle.dump(data, fp, protocol=pickle.HIGHEST_PROTOCOL)
import pickle
Minimales Beispiel, direkt in eine Datei schreiben:
oder sicher öffnen / schließen:
Wenn Sie es in einer Zeichenfolge anstelle einer Datei speichern möchten:
quelle
Siehe auch das beschleunigte Paket ujson. https://pypi.python.org/pypi/ujson
quelle
So schreiben Sie in eine Datei:
So lesen Sie aus einer Datei:
myfile
ist das Dateiobjekt für die Datei, in der Sie das Diktat gespeichert haben.quelle
json.dump(myfile)
undjson.load(myfile)
Wenn Sie nach der Serialisierung sind, aber die Daten in anderen Programmen nicht benötigen, empfehle ich das
shelve
Modul dringend . Betrachten Sie es als ein beständiges Wörterbuch.quelle
json
ist dies bequemer.shelve
ist nur besser für den Zugriff auf jeweils einen Schlüssel.Wenn Sie eine Alternative zu
pickle
oder möchtenjson
, können Sie verwendenklepto
.Mit
klepto
, wenn Sie verwendet hättenserialized=True
, wäre das Wörterbuchmemo.pkl
als eingelegtes Wörterbuch anstatt mit klarem Text geschrieben worden.Sie erhalten
klepto
hier: https://github.com/uqfoundation/kleptodill
ist wahrscheinlich eine bessere Wahl zum Beizen alspickle
selbst, dadill
fast alles in Python serialisiert werden kann.klepto
kann auch verwendendill
.Sie erhalten
dill
hier: https://github.com/uqfoundation/dillDas zusätzliche Hokuspokus in den ersten Zeilen liegt daran
klepto
es so konfiguriert kann, dass Wörterbücher in einer Datei, in einem Verzeichniskontext oder in einer SQL-Datenbank gespeichert werden. Die API ist für alles, was Sie als Backend-Archiv auswählen, dieselbe. Sie erhalten ein "archivierbares" Wörterbuch, mit dem Sie das Archiv verwendenload
unddump
mit ihm interagieren können.quelle
Dies ist ein altes Thema, aber der Vollständigkeit halber sollten wir ConfigParser und configparser einschließen, die Teil der Standardbibliothek in Python 2 bzw. 3 sind. Dieses Modul liest und schreibt in eine config / ini-Datei und verhält sich (zumindest in Python 3) in vielerlei Hinsicht wie ein Wörterbuch. Es hat den zusätzlichen Vorteil, dass Sie mehrere Wörterbücher in separaten Abschnitten Ihrer config / ini-Datei speichern und abrufen können. Süss!
Python 2.7.x Beispiel.
Python 3.X Beispiel.
Konsolenausgabe
Inhalt der config.ini
quelle
Wenn Sie in einer JSON-Datei speichern, ist dies am besten und einfachsten:
quelle
json.dump( )
in der anderen Antwort beschrieben?Mein Anwendungsfall war das Speichern mehrerer JSON-Objekte in einer Datei, und Martys Antwort half mir etwas. Um meinem Anwendungsfall gerecht zu werden, war die Antwort jedoch nicht vollständig, da die alten Daten jedes Mal überschrieben würden, wenn ein neuer Eintrag gespeichert wird.
Um mehrere Einträge in einer Datei zu speichern, muss nach dem alten Inhalt gesucht werden (dh vor dem Schreiben lesen). Eine typische Datei mit JSON-Daten hat entweder ein
list
oder einobject
als root. Daher habe ich berücksichtigt, dass meine JSON-Datei immer eine enthält.list of objects
Jedes Mal, wenn ich Daten hinzufüge, lade ich einfach zuerst die Liste, füge meine neuen Daten hinzu und speichere sie wieder in eine nur beschreibbare Instanz von file (w
):Die neue JSON-Datei sieht ungefähr so aus:
HINWEIS: Es ist wichtig, eine Datei
file.json
mit[]
den Anfangsdaten zu haben, damit dieser Ansatz funktioniertPS: Nicht im Zusammenhang mit der ursprünglichen Frage, aber dieser Ansatz könnte auch weiter verbessert werden, indem zunächst geprüft wird, ob unser Eintrag bereits vorhanden ist (basierend auf 1 / mehreren Schlüsseln), und erst dann die Daten angehängt und gespeichert werden. Lassen Sie mich wissen, wenn jemand diesen Scheck benötigt, ich werde die Antwort ergänzen
quelle