Wie speichert man am besten Listen, Dictionaries...?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
ll9
User
Beiträge: 34
Registriert: Samstag 9. Februar 2013, 15:13

Hallo,

ich bin mir momentan noch nicht sicher, wie ich den Dictionaries, Listen und Variablen am besten speicher soll. Ich würde das ganze gespeicherte Zeug am liebsten in einer Datei haben. Ich habe auch erst ein Programm geschrieben, was diese Funktionen benötigt. Dort lies ich einfach immer zum Schluss des Programms sämtliche Listen, Dictionaries die ich brauchte in ein anderes Dokument schreiben. Indem ich das Dokument dann importiert habe, hatte ich wieder Zugriff auf die Listen usw. Nun frage ich mich aber, ob das wirklich der beste Weg war. Ich hab mich jetzt vor kurzem auch an pickle versucht, aber kann man bei Pickle nicht jeweils nur eine Liste/ Dictionary/ Variable pro Dokument speichern? Ich kenn mich da noch nicht ganz so aus. Wie speichert man denn am sinnvollsten/ effizientesten? Könnt ihr mir dafür vielleicht einen Beispielcode geben?

Danke schonmal im voraus.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@ll9: da Pickle ein Filehandle erwartet, kannst Du ganz einfach mehrere Objekte mit dem selben Filehandle pickeln und entpickeln, oder Du nimmst eine Liste/Dictionary mit allen Objekten die Du speichern willst. Was das richtige Dateiformat für Deine Daten ist, kommt auf die Anwendung an.
BlackJack

@ll9: Für die meisten Grunddatentypen eignet sich JSON über das `json`-Modul aus der Standardbibliothek ganz gut. Vorteil gegenüber `pickle`: Das Format kann von sehr vielen Programmiersprachen genutzt werden und nicht nur von Python.
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

@BJ: Setzt das nicht voraus dass alle sich darauf geeinigt haben bspw. utf8 zu verwenden? Oder speichert das irgendwo die Kodierung?
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
BlackJack

@darktrym: Das RFC sagt „The default encoding is UTF-8.” und mir ist bisher auch noch keine andere Kodierung begegnet. Einige Generatoren beschränken sich auch auf ASCII und Escapen grundsätzlich alles was ausserhalb von ASCII liegt.
ll9
User
Beiträge: 34
Registriert: Samstag 9. Februar 2013, 15:13

@BlackJack

ich hab jetzt mal ein bisschen was über JSON durchgelesen und JSON scheint wohl recht viel zum Encodieren und Decodieren verwendet zu werden. Das was für mich jetzt interessant war, sah ein bisschen ähnlich aus wie in Pickle. Kannst du mir vielleicht kurz das Prinzip erläutern, wie man in JSON am besten etwas abspeichert und dann darauf wieder zugreift (vielleicht anhand von einen Beispiel?)? Vor allem, wenn man mehrere Listen oder Dictionaries abspeichert und wieder aufrufen will ist mir das Prinzip dahinter noch nicht ganz flüssig.

Ansonsten danke für den guten und schnellen support.
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
ll9
User
Beiträge: 34
Registriert: Samstag 9. Februar 2013, 15:13

Danke, aber auf die offiziele Python dokumentation hät ich auch selber kommen können. Ich finde dort recht wenig, was konkret auf meine Problematik eingeht und für Anfänger finde ich das auch etwas zu schwierig einfach so dahinter zu kommen. Ich zeig euch jetzt mal kurz ein beispiel meinerseits.

Code: Alles auswählen

import json

list = [0, 1, 2, 3, 4]
list2 = [5, 6, 7, 8, 9]

with open("test.txt", "wb") as file:
    json.dump(list, file)
    json.dump(list2, file)
jetzt steht in dem Textdokument das hier drin:

Code: Alles auswählen

[0, 1, 2, 3, 4][5, 6, 7, 8, 9]
Er hat list und list2 also dort reingeschrieben. Ist auch alles ohne Komma getrennt und lässt sich nicht mehr so leicht zuordnen. Wie kann ich denn mit json.load da auf die einzelnen Elemente geziehlt zugreifen?

Ich will einfach etwas innerhabl von einen Programm speichern können, das Programm beenden können und dann wieder zugriff darauf haben können. Und das mit mehreren Listen, Dictionaries und auch Variablen. Kann mir jemand vielleicht erklären, wie das geht?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@ll9: Du packst alles was Du speichern willst in eine Liste:

Code: Alles auswählen

import json
 
list = [0, 1, 2, 3, 4]
list2 = [5, 6, 7, 8, 9]
 
with open("test.txt", "wb") as file:
    json.dump((list, list2), file)

with open("test.txt", "rb") as file:
    (list, list2) = json.load(file)
Antworten