Einzelne Zeile in .txt löschen mit Python

P3chv0gel

Ensign
Registriert
Dez. 2017
Beiträge
170
Hallo zusammen,

Ich hab folgendes Problem:
Ich habe ein Skript, das mir eine ToDo Liste als .txt erstellen soll. Jetzt habe ich das Problem, dass ich gerne der Funktion einen Integer übergeben würde, und die Funktion dann bspw. Zeile Nr. 5 löscht. Gibt es dafür eine einfache Funktion in Python oder wie müsste ich das machen, dass ich nur diese eine Zeile lösche?
 
Kommt drauf an wie dein code aussieht... Das geht auf viele arten und weisen einfach.
 
Komplette Datei zeilenweise in eine Liste einlesen und per Schleife zeilenweise wieder ausgeben, wobei du die gegebene Zeile per Bedingung und Continue-Anweisung überspringst. Zack feddich, Zeile gelöscht.
 
Dann musst du aber die ganze Datei in den Speicher laden. Für eine ToDo Liste kein Problem aber wenn die Dateien größer werden verbraucht man damit unnötig Speicher.
Ich würde zeilenweise in einer Schleife einlesen, prüfen ob die Zeile auf einen Text matched, und gleichzeitig zeilenweise schreiben. Muss natürlich in eine andere Datei erfolgen.
Soll die Datei wieder gleich heißen nachträglich die alte Datei löschen und die neue zur alten umbenennen. Das hat auch den Vorteil das die Daten nicht verloren gehen wenn das Programm zwischendurch abstürzt.

Je nach Aufbau des Programms trifft diese Vorgehensweise aber gar nicht zu. Wenn er sagt er hat ein Skript um seine ToDo Liste zu managen ... läuft das dauerhaft, heißt die hält eh immer alle ToDo Einträge im Speicher vor? Oder wie sieht das aus?
 
  • Gefällt mir
Reaktionen: cbtestarossa und 0x8100
Python:
current_line = 0
skip_line = 5

with open('in.txt') as in_file, open('out.txt', 'w') as out_file:
    for line in in_file:
        current_line += 1
        if current_line != skip_line:
            out_file.write(line)
 
  • Gefällt mir
Reaktionen: Marco01_809, besseresmorgen und cbtestarossa
Wir sind hier nicht im Bereich High-Performance-Computing und es war auch nicht von ausufernd großen Dateien die Rede ... wozu dann der Mehraufwand? Wenn ich Performance will, greife ich sowieso nicht zu Python.
 
Also bin in Python nicht so bewandert aber ich denke eine Datei komplett in den Speicher zu laden ist nicht der Weg.

Besser (universeller) ist es denk ich die Datei zeilenweise einzulesen und das Ergebnis in eine zweite Datei zu schreiben.
 
Wird in der Praxis keinen Unterschied machen ... insbesondere spart man sich den Zwischenschritt mit der Ausgabedatei. Geht aber natürlich alles, das ist ein freies Land :D

Mich wundert eher, dass ein solches Problem angeblich nicht von Dr. Google beantwortet werden kann.
 
Naja man könnte natürlich auch eine Datenbank nehmen oder anstelle von Textdateien eine Direktzugriffsdatei verwenden.
Ob Python das bietet müsste man sich ansehen.
Irgendwann müsste man dann die TXT Datei auch konvertieren und wieder zurückschreiben.
 
cbtestarossa schrieb:
Ob Python das bietet müsste man sich ansehen.

Hat Python alles (zum Beispiel sqlite-Anbindung) und ist sicherlich eine saubere Lösung, wäre hier aber wohl doch etwas zu viel des Guten ... :D
 
  • Gefällt mir
Reaktionen: cbtestarossa
Wieso eigentlich Python? Das ist ein Problem, für das u.a. sed geschaffen wurde:
Code:
$ cat test.txt
asfd
ghjkl
wqert
2134
kld
mmn
$ sed '3d' test.txt
asfd
ghjkl
2134
kld
mmn
 
nullPtr schrieb:
Wieso eigentlich Python?

Weil der Threadersteller nach Python gefragt hat und aus dem Eingangspost nicht ersichtlich ist, ob ein Bash-Terminal überhaupt infrage kommt.
 
  • Gefällt mir
Reaktionen: SR388 und FAN4TIC
Also wenn der TE nicht extrem faul ist und dadurch seine ToDo-Liste extrem lang wird, ist effiziente Programmierung vermutlich nicht das große Thema ;)
 
  • Gefällt mir
Reaktionen: adAstra
@KuestenNebel Sorry, ich wollte euch bisherigen Antwortern nichts unterstellen.
Die Frage ist an TE gerichtet: Handelt es sich vielleicht um ein X-Y-Problem und es war nur "einfach" in Python anzufangen?
 
nullPtr schrieb:
@KuestenNebel Sorry, ich wollte euch bisherigen Antwortern nichts unterstellen.
Die Frage ist an TE gerichtet: Handelt es sich vielleicht um ein X-Y-Problem und es war nur "einfach" in Python anzufangen?
Ich muss für die Uni Python lernen und mache das quasi als Übung dafür.

Marco01_809 schrieb:
Je nach Aufbau des Programms trifft diese Vorgehensweise aber gar nicht zu. Wenn er sagt er hat ein Skript um seine ToDo Liste zu managen ... läuft das dauerhaft, heißt die hält eh immer alle ToDo Einträge im Speicher vor? Oder wie sieht das aus?

läuft dauerhaft, aber wird wie gesagt, alles in einer .txt angespeichert, welche ich direkt wieder schließe. dementsprechend dürfte theoretisch nicht allzu viel dauerhaft im Speicher verbleiben
 
KuestenNebel schrieb:
Mich wundert eher, dass ein solches Problem angeblich nicht von Dr. Google beantwortet werden kann.
ja, eine Datei zeilenweise durchgehen und dann eine Zaehlervariable nutzen, erscheint mir der logische Weg wenn man drueber nachdenkt. Aber gut, Problem ist ja geloest.

Wenn hier nicht das Ziel waere Python kennenzulernen, wuerde ich uebrigens auch eher sed oder meinetwegen sowas wie awk mal ausprobieren. Man kann nur dabei lernen.
 
  • Gefällt mir
Reaktionen: nullPtr und adAstra
Zurück
Oben