Datenbanken = [ ]
if not Datenbanken: print("ist leer") , Datenbanken.append("1xxx")
else: print('was drin')
die Liste wird aufgefüllt und in Listbox angezeigt.
Beim nächsten Start des Programms ist sie wieder leer
warum funktioniert das nicht?
Hallo,
das wird nirgends gespeichert. Wenn du das willst, dann musst du Code schreiben, der die Daten in eine Datei schreibt.
Du erstellst zu dem zu Programmstart eine leere Liste mit dem Namen `Datenbanken`. Da kann `Datenbanken` nur leer sein, wenn du die Liste danach gleich abfragst.
Grüße
Dennis
das wird nirgends gespeichert. Wenn du das willst, dann musst du Code schreiben, der die Daten in eine Datei schreibt.
Du erstellst zu dem zu Programmstart eine leere Liste mit dem Namen `Datenbanken`. Da kann `Datenbanken` nur leer sein, wenn du die Liste danach gleich abfragst.
Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
wenn ich das richtig verstehe, muss ich die liste aus einer Datei z.B.txt füllen.
d.h. ich überprüfe als erstes ob die txt vorhanden , wenn ja ,ob sie leer ist oder daten drinstehen.
dann fülle ich die Liste aus der .txt
d.h. ich überprüfe als erstes ob die txt vorhanden , wenn ja ,ob sie leer ist oder daten drinstehen.
dann fülle ich die Liste aus der .txt
Gruß Manfred
Ganz genau. Ich würde bei relativ simplen Anwendungsfällen mit Grunddatentypen aber das JSON-Format benutzen. Dafür bringt Python ein gleichnamiges Modul mit, das Funktionalität zum Speichern und Laden der Daten enthält.StMan hat geschrieben: Donnerstag 22. Januar 2026, 20:18 wenn ich das richtig verstehe, muss ich die liste aus einer Datei z.B.txt füllen.
und wie heist das Modul, und wie funktioniert es?snafu hat geschrieben: Donnerstag 22. Januar 2026, 20:33Ganz genau. Ich würde bei relativ simplen Anwendungsfällen mit Grunddatentypen aber das JSON-Format benutzen. Dafür bringt Python ein gleichnamiges Modul mit, das Funktionalität zum Speichern und Laden der Daten enthält.StMan hat geschrieben: Donnerstag 22. Januar 2026, 20:18 wenn ich das richtig verstehe, muss ich die liste aus einer Datei z.B.txt füllen.
PS. ich bin absoluter Anfänger
Gruß Manfred
-
Pedroski55
- User
- Beiträge: 32
- Registriert: Freitag 25. Juli 2025, 00:20
Nur Übungssache: versuch mal!
Code: Alles auswählen
meine_datei = '/home/peterr/temp/irgendwas_speichern.txt'
# open w startet eine neue Datei
# falls die Datei existiert, wird sie überschrieben
with open(meine_datei, 'w') as zu_speichern:
for i in range(10):
zu_speichern.write(f'Zeile {i}.\n')
# open a startet eine neue Datei wenn die Datei nicht existiert, oder
# wenn die Datei existiert, werden Zeilen angehängt.
with open(meine_datei, 'a') as zu_speichern:
for i in range(10):
zu_speichern.write(f'Zeile {i}.\n')
with open(meine_datei, 'a') as zu_speichern:
for i in range(10):
zu_speichern.write(f'Zeile {i}.\n')
# open x meldet einen Fehler wenn die Datei existiert und macht nichts, sicherheitshalber.
with open(meine_datei, 'x') as zu_speichern:
for i in range(10):
zu_speichern.write(f'Zeile {i}.\n')
# FileExistsError: [Errno 17] File exists: '/home/peterr/temp/irgendwas_speichern.txt'
data = []
for i in range(10):
data.append(f'Zeile {i}.\n')
string = ''.join(data)
with open(meine_datei, 'a') as zu_speichern:
zu_speichern.write(string)Das Modul heißt wie gesagt genau wie das Format. Die entscheidenden Funktionen sind load() zum Laden der Daten via Datei und das Gegenstück dump() zum Speichern in die Datei. Die Doku zum Modul ist leicht online zu finden, ebenso wie zig Beispiele.
Zu beachten ist noch die konkrete Einbindung in deinen Code (den wir nicht kennen). Soll das Laden und Speichern explizit per Button durch den Anwender erfolgen? Oder etwas magischer per GUI Events? Da du eingangs eine Listbox erwähnt hast, gehe ich mal von einem Framework aus. Mehr Infos wären hier hilfreich.
Zu beachten ist noch die konkrete Einbindung in deinen Code (den wir nicht kennen). Soll das Laden und Speichern explizit per Button durch den Anwender erfolgen? Oder etwas magischer per GUI Events? Da du eingangs eine Listbox erwähnt hast, gehe ich mal von einem Framework aus. Mehr Infos wären hier hilfreich.
- __blackjack__
- User
- Beiträge: 14276
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@StMan: Man sollte keine Tupel erstellen, einzig weil man mehr als eine Anweisung in eine Zeile pressen will. Und per Konvention schreibt man auch einzelne Anweisungen in einen eingerückten Block statt direkt hinter dem ``:`` in der gleichen Zeile.
Der Code aus dem ersten Beitrag sähe dann so aus:
Edit: Du würdest bei der Textdateivariante zu viel testen. Das die Datei nicht vorhanden ist, merkt man am `FileNotFoundError` den man ja sowieso behandeln sollte. Auch ob die Datei leer ist, braucht man nicht testen. Wenn man 0 Zeilen in eine Liste einliest, dann ist die Liste leer.
Der Code aus dem ersten Beitrag sähe dann so aus:
Code: Alles auswählen
datenbanken = []
if not datenbanken:
print("ist leer")
datenbanken.append("1xxx")
else:
print("was drin")“Programming is partially an artform and, like artists, programmers will do it even if they don't get money.” — Linus Torvalds
Hier ein klassenbasierter Ansatz mit tkinter:
Zum Speichern und Laden der Daten wird eine reine Textdatei genutzt.
Ist es eigentlich okay, dass meine App von tk.TK erbt oder sollte ich besser tk.Frame als Basisklasse benutzen?
Code: Alles auswählen
#!/usr/bin/env python3
from pathlib import Path
import tkinter as tk
class ListboxManager:
def __init__(self, root, file_path="entries.txt"):
self.root = root
self.file_path = Path(file_path)
self.add_widgets()
self.load_data()
def add_widgets(self):
self.root.columnconfigure(0, weight=1)
self.root.rowconfigure(1, weight=1)
self.entry = tk.Entry(self.root)
self.entry.grid(row=0, column=0, padx=10, pady=10, sticky="ew")
self.add_button = tk.Button(self.root, text="Add Item", command=self.add_item)
self.add_button.grid(row=0, column=1, padx=10, pady=10)
self.listbox = tk.Listbox(self.root)
self.listbox.grid(row=1, column=0, columnspan=2, padx=10, pady=10, sticky="nsew")
def add_item(self, text=None):
if text is None:
text = self.entry.get()
self.entry.delete(0, tk.END)
if (item := text.strip()):
self.listbox.insert(tk.END, item)
def load_data(self):
try:
with self.file_path.open("r", encoding="utf-8") as stream:
for line in stream:
self.add_item(line)
except FileNotFoundError:
print(f"Could not find '{self.file_path}', starting with an empty listbox")
except Exception as error:
print(f"Error loading data: {error}")
def save_data(self):
try:
items = self.listbox.get(0, tk.END)
self.file_path.write_text("\n".join(items), encoding="utf-8")
except Exception as error:
print(f"Error saving data: {error}")
class ListboxApp(tk.Tk):
def __init__(self, name="Listbox App"):
super().__init__()
self.title(name)
self.manager = ListboxManager(self)
self.protocol("WM_DELETE_WINDOW", self.on_exit)
def on_exit(self):
self.manager.save_data()
self.destroy()
def main():
app = ListboxApp()
app.geometry("400x350")
app.mainloop()
if __name__ == "__main__":
main()Ist es eigentlich okay, dass meine App von tk.TK erbt oder sollte ich besser tk.Frame als Basisklasse benutzen?
