Neue Dictionary-Einträge abspeichern (nach Programmneustart)

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
bluna
User
Beiträge: 8
Registriert: Dienstag 4. August 2009, 12:54

Hallo alle beisammen,

wie man sieht bin ich neu hier, ich hoffe ich kann hier ein wenig Hilfe bekommen ;)

Folgendes Problem:

Ich bin dabei mir ein Telefonbuch zu programmieren + Gui (Tkinter). Eine Option ist es, einen neuen Eintrag hinzuzufügen.

Code: Alles auswählen

def neuer_eintrag():
    y = eingabe2.get()
    z = eingabe3.get()
    if telefonliste.has_key(y):
        tkMessageBox.showerror("Neuer Eintrag nicht möglich!", "Eintrag bereits Vorhanden")
    else:
        telefonliste[y] = z
        print telefonliste
(Auszug) So habe ich es bewältigt. Der Printbefehl zeigt mir auch an, dass der neue Schlüssel + Wert vorhanden ist, aber nur so lange das Programm läuft. Nach beenden und Neustart des Programms sind alle neuen Einträge im Dictionary nicht mehr vorhanden.

Wie kriege' ich's hin, dass mein Programm alles speichert, was der Anwender tut (sprich: die Personen+Telefonnummern, die dem Dictionary übergeben werden nicht nur für eine 'Session' speichern, sondern für immer) ?

Habe das Programm unter Windows mit Python 2.6.2(64bit) geschrieben.

Vielen dank im Voraus,

Mit freundlichen Grüßen

bluna
sind wir nicht alle ein bisschen... bLuNa !?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Die (sinnvollen) Moeglichkeiten sind ``shelve``, ``pickle`` oder gleich eine Datenbank.
Mehr dazu hier: http://www.python-forum.de/topic-6157.html
bluna
User
Beiträge: 8
Registriert: Dienstag 4. August 2009, 12:54

super, vielen dank schonmal für die schnelle antwort.
Das werde ich mir ma genauer durchlesen, hoffe ich steig da auch durch ansonsten poste ich nochmal.

btw: Wenn ich mit py2exe das Programm zur .exe mache, funktionieren diese Varianten dann auch noch? Also, so dass ich theoretisch das Programm nen Freund schicken kann und der ohne weiteres installieren von Python etc das Programm jederzeit um Telefonnummern erweitern kann?

naja ich lese auf jeden erstmal, bevo ich frage und google gibt's ja auch - big thnx cofi ;)
sind wir nicht alle ein bisschen... bLuNa !?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Im Prinzip wird es funktionieren, wenn die herausfallenden Daten denn mit verteilt werden, bei der Datenbank bietet sich aber dann nur noch SQLite an.

Allerdings muss man sagen, dass man generell die Installation von Python bevorzugen sollte, da py2exe keine echten Executables erstellt sondern nur ausfuehrbare ZIPs, die den ganzen Interpreter und alles benoetigte enthalten.
Mit NSIS und InnoSetup lassen sich da auch gleich Installer zusammenpacken, die sowohl Interpreter als auch das eigene Programm enthalten.
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Wenn du nicht explizit die Anweisung gibst, Dinge in eine Datei zu schreiben, oder ein entsprechendes Modul benutzt welches den Vorgang verwaltet, wird gar nichts gespeichert. Alle typischen Datenstrukturen in Python wie zb Dictionaries oder eine Liste sind nur im Speicher vorhanden, solange du sie nicht auf irgendeine Art und Weise speicherst (hiesse dann an dieser Stelle "Serialisierung"). eingabe2 und eingabe3 sind keine sonderlich guten Namen. Welches Tutorial benutzt du? Sofern du Englisch kannst, solltest du das Tutorial auf docs.python.org benutzen. Ansonsten gibt es "A byte of Python".

Die Methode "has_key()" von Dict Objekten ist seit 2.6 deprecated, man würde heute / in Zukunft "key in <name des dicts>" benutzen.
Antworten