Liebe Community!
Ich programmiere gerade ein GUI-Programm mit tkinter.
Man kann einen Text erstellen und die X und Y Koordinaten angeben. Der Text, X und Y Koordinaten werden mit pickle in eine .txt Datei geschrieben. Nämlich:
Text x_koordinate y_koordinate
Text2 x_koordinate y_koordinate
usw.
Nun habe ich vor das man einen Text löschen kann in dem man in ein Eingabefeld den Text schreibt. z.B ich gebe ein Text2 und dann wird die ganze Zeile mit Text2 (inkl. den Koordinaten) gelöscht. Leider hänge ich hier fest weil ich nicht weiß wie man nur das erste Wort einer Zeile mit pickle lesen kann und auch gleichzeitig die Zeilennummer des Wortes bekommt.
Ich hoffe ihr könnt mir weiterhelfen.
Mit freundlichen Grüßen
Pickl erstes wort in Zeile lesen
Man benutzt pickle eher selten bis nie, nur fuer Daten, die man sehr temporaer vorhanden sein muessen - also zB einen Cache oder Daten, die man per multiprocessing verteilt.
Benutzt stattdessen ein geeignetes Format wie zB CSV.
So oder so kannst du keine Eintraege selektiv loeschen oder aehnliches. Das unterstuetzen Dateisysteme nicht. Also bleibt nur alles einlesen, Daten aendern, alles schreiben. Oder ggf. eine Datenbank wie sqlite benutzen.
Benutzt stattdessen ein geeignetes Format wie zB CSV.
So oder so kannst du keine Eintraege selektiv loeschen oder aehnliches. Das unterstuetzen Dateisysteme nicht. Also bleibt nur alles einlesen, Daten aendern, alles schreiben. Oder ggf. eine Datenbank wie sqlite benutzen.
-
- User
- Beiträge: 2
- Registriert: Samstag 29. Februar 2020, 14:40
Ich habe es bereits geschaft eine Zeile zu löschen:
hierbei wir aber immer die erste Zeile meiner Datei gelöscht.
Code: Alles auswählen
def loeschen():
f = open('file1.txt','rb')
lines = f.readlines()
f.close()
del lines[0]
f = open('file1.txt','wb')
for l in lines:
f.write(l)
f.close()
- __blackjack__
- User
- Beiträge: 14052
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@AnonymusAnonym: Das ist ja auch exakt das was der Code dem Python-Interpreter/Rechner sagt, ``del lines[0]`` löscht das erste Element von `lines`.
Der Code ist nicht besonders gut. Wenn es geht sollte man bei Textdateien immer die ``with``-Anweisung verwenden.
`f` ist kein guter Name. Wenn Du `file` meinst, dann schreib das auch.
Dateiobjekte kennen eine `writelines()`-Methode, da spart man sich eine Schleife.
Der Dateiname kommt zweimal im Quelltext vor. Wenn man den mal ändern will, dann muss man ihn mehrfach anpassen und immer darauf achten ihn an allen Stellen gleichartig zu ändern. Darum definiert man so etwas als Konstante.
Man sollte auch den Fall berücksichtigen das die Datei leer ist. Da würde ``del lines[0]`` dann nämlich zu einer Ausnahme führen.
Der Code ist nicht besonders gut. Wenn es geht sollte man bei Textdateien immer die ``with``-Anweisung verwenden.
`f` ist kein guter Name. Wenn Du `file` meinst, dann schreib das auch.
Dateiobjekte kennen eine `writelines()`-Methode, da spart man sich eine Schleife.
Der Dateiname kommt zweimal im Quelltext vor. Wenn man den mal ändern will, dann muss man ihn mehrfach anpassen und immer darauf achten ihn an allen Stellen gleichartig zu ändern. Darum definiert man so etwas als Konstante.
Man sollte auch den Fall berücksichtigen das die Datei leer ist. Da würde ``del lines[0]`` dann nämlich zu einer Ausnahme führen.
Code: Alles auswählen
FILENAME = "file1.txt"
def loeschen():
with open(FILENAME, "rb") as file:
lines = list(file)
if lines:
del lines[0]
with open(FILENAME, "wb") as file:
file.writelines(lines)
“Vir, intelligence has nothing to do with politics!” — Londo Mollari