Ich schreibe ein Programm, das Daten in einem Wörterbuchobjekt speichert. Diese Daten müssen jedoch zu einem bestimmten Zeitpunkt während der Programmausführung gespeichert und bei der nächsten Ausführung des Programms wieder in das Wörterbuchobjekt geladen werden. Wie kann ich ein Wörterbuchobjekt in eine Zeichenkette umwandeln, die in eine Datei geschrieben und wieder in ein Wörterbuchobjekt geladen werden kann? Dies wird hoffentlich Wörterbücher mit Wörterbüchern unterstützen.
Antworten
Zu viele Anzeigen?Vielleicht finden Sie die json.dumps()
Methode braucht Hilfe bei der Handhabung einiger Objekttypen.
Die Anerkennung geht an die beste Antwort von diese Stelle für das Folgende:
import json
json.dumps(my_dictionary, indent=4, sort_keys=True, default=str)
Ich denke, Sie sollten die Verwendung des shelve
Modul, das persistente, dateiunterstützte, wörterbuchähnliche Objekte bereitstellt. Es ist einfach anstelle eines "echten" Wörterbuchs zu verwenden, da es Ihrem Programm fast transparent etwas zur Verfügung stellt, das wie ein Wörterbuch verwendet werden kann, ohne dass es explizit in eine Zeichenkette konvertiert und dann in eine Datei geschrieben werden muss (oder umgekehrt).
Der Hauptunterschied besteht darin, dass man zunächst open()
vor dem ersten Gebrauch und dann close()
wenn Sie fertig sind (und möglicherweise sync()
abhängig von der jeweiligen writeback
Option verwendet wird). Alle "Shelf"-Dateien, die erstellt werden, können reguläre Wörterbücher als Werte enthalten, so dass sie logisch verschachtelt werden können.
Hier ist ein triviales Beispiel:
import shelve
shelf = shelve.open('mydata') # open for reading and writing, creating if nec
shelf.update({'one':1, 'two':2, 'three': {'three.1': 3.1, 'three.2': 3.2 }})
shelf.close()
shelf = shelve.open('mydata')
print shelf
shelf.close()
Salida:
{'three': {'three.1': 3.1, 'three.2': 3.2}, 'two': 2, 'one': 1}
Wenn Ihnen die Geschwindigkeit wichtig ist, verwenden Sie ujson (UltraJSON), die die gleiche API wie json hat:
import ujson
ujson.dumps([{"key": "value"}, 81, True])
# '[{"key":"value"},81,true]'
ujson.loads("""[{"key": "value"}, 81, true]""")
# [{u'key': u'value'}, 81, True]