Wie speichert man in Python Nutzer-eingaben so, dass sie auch nach beendigung des Programms noch in einer Liste im Programm enthalten sind?

1 Antwort

Du kannst deine Daten einfach in einen String serialisieren und dann in einer Textdatei abspeichern.

Guck dir dazu mal das "pickle" Module an!

Alternativ könntest du die Daten auch in einer Datenbank speichern (siehe z. B.  "sqlite3" Modul).

Dann musst du beim nächsten Programmstart nur noch überprüfen, ob deine Daten existieren und lesbar sind. Wenn ja, liest du die Datei / DB ein, und unserialisierst alles. Wenn nein, initialisiere deine Objekte mit Standardwerten.

Mini Beispiel:

# am Programmanfang:
try:
with open('data.txt', 'r') as fh:
my_int = int(fh.read().strip(), 10)
except:
my_int = 123

# mitten im Programm:
my_int += 1
print(i)

# am Programmende:
try:
with open('data.txt', 'w') as fh:
fh.write('%d' % my_int)
except:
print('Aaaaahh!')

Dabei wird ein Integer mit einem Wert aus der Datei "data.txt" initialisiert. Scheitert dies (z. B. weil die Datei noch nicht exisitert), wir er stattdessen mit einem Standardwert von "123" initialisiert.

Danach kann mit dem Integer gearbeitet werden.

Am Programm-Ende, wird der Integer einfach wieder - mit seinem potentiell neuen Wert - in die Datei geschrieben. (= überschrieben)

Wenn du mehr als einen einzigen Integer laden und speichern möchtest, musst du einfach nur die Lese- und Schreibroutinen erweitern, die am Anfang und am Ende des Programms stehen.

Dafür könntest du mit INI-Dateien, oder CSV-Dateien arbeiten. Python bietet auch dafür bereits vorgefertigte Module. (Die API-Dokumentation ist dein Freund!)

Sollte dir das alles immer noch zu hoch sein, dann lass alles stehen und liegen, schnapp dir ein gutes Python Buch oder Tutorial, und lern erst mal die grundlegensten Grundlagen. Alles andere ist danach ein Klacks! :)

Viel Spaß! :)

PS: Ich bin jetzt von reinem ASCII-Text bzw. darauf basierenden Kodierungen wie UTF-8 ausgegangen. Achte bitte immer auf die Text-Kodierung, wenn du Textdaten speicherst, und verwende niemals ein "nacktes" open() wie in meinem Beispiel oben! Ich habe das nur der Übersichtlichkeit wegen so gemacht ... ansonsten ist so etwas eigentlich unentschuldbar!

G3rr3d 
Fragesteller
 08.10.2015, 21:57

Moin,

Danke für die schnelle Antwort.

Gutes Python Buch und Grundlagen hab ich schon.

Ich werds also einfach mal ausprobieren :)

1