Seite 1 von 1

Zeile in Textdatei löschen

Verfasst: Donnerstag 19. Juli 2018, 20:58
von egon11
Ich möchte die erste Zeile einer Textdatei löschen, ich hab es bis jetzt nicht hinbekommen. Kann mir jemand einen Denkanstoß geben?

Re: Zeile in Textdatei löschen

Verfasst: Donnerstag 19. Juli 2018, 21:12
von Sirius3
Du liest die Datei komplett ein und schreibst wieder alles bis auf die erste Zeile.

Re: Zeile in Textdatei löschen

Verfasst: Donnerstag 19. Juli 2018, 21:24
von egon11
Ich müsste dann 2x die datei öffnen, das 1. mal zum lesen und das 2. mal zum schreiben.
Soweit ist alles klar, nur wie schreibe ich die unbekannten Zeilenanzahl neu außer die erste?

Re: Zeile in Textdatei löschen

Verfasst: Donnerstag 19. Juli 2018, 21:28
von egon11
Mit

Code: Alles auswählen

readline()[1:]
?

Re: Zeile in Textdatei löschen

Verfasst: Donnerstag 19. Juli 2018, 21:33
von __blackjack__
@egon11: Ich würde die erste Zeile beim einlesen schon überspringen.

Re: Zeile in Textdatei löschen

Verfasst: Donnerstag 19. Juli 2018, 21:41
von egon11
Es würde dann bestimmt so aussehen:

Code: Alles auswählen

a = open("/meinedatei.txt")
file = a.readlines()[2:]
a.close()

b = open ("/meinedatei.txt", "w")
b.write(file)
b.close()

Re: Zeile in Textdatei löschen

Verfasst: Donnerstag 19. Juli 2018, 22:41
von __blackjack__
Nein, weil das a) die ersten *zwei* Zeilen entfernt und b) trotzdem erst einmal alle Zeilen einliest.

Die Namen sind schlecht. `a` und `b` müssen nicht verschieden sein, es wäre aber besser wenn die tatsächlich beschreiben würden was der Name bedeutet. `file` ist keine Datei sondern eine Liste mit Zeilen.

Re: Zeile in Textdatei löschen

Verfasst: Donnerstag 19. Juli 2018, 22:53
von Sirius3
c) weil man Listen nicht mit `write` schreiben kann.

Re: Zeile in Textdatei löschen

Verfasst: Freitag 20. Juli 2018, 04:30
von egon11
Ok, und wie könnte ich es verwirklichen?

Re: Zeile in Textdatei löschen

Verfasst: Freitag 20. Juli 2018, 12:19
von egon11
Nimmt man in meinen Fall besser "read()" oder "readlines()"?

Re: Zeile in Textdatei löschen

Verfasst: Freitag 20. Juli 2018, 12:23
von __deets__
Wenn du eine ZEILE überspringen willst, dann natürlich readlines.

Und schreiben musst du eben auch wieder jede einzelne Zeile. Da dann mit write.

Re: Zeile in Textdatei löschen

Verfasst: Freitag 20. Juli 2018, 12:32
von __blackjack__
Oder man nimmt die Methode die tatsächlich mehrere Zeilen aus einem iterierbaren Objekt speichern kann.

Re: Zeile in Textdatei löschen

Verfasst: Freitag 20. Juli 2018, 12:46
von __deets__
Oh. Gibts die? Hab sie nie benutzt.

Re: Zeile in Textdatei löschen

Verfasst: Freitag 20. Juli 2018, 16:39
von egon11
So das ganze hab ich jetzt so gelöst:

Code: Alles auswählen

allfile = open("/home/versuch.txt", "r")
fobj = allfile.readlines()[1:]
allfile.close()
for i in fobj:
    print(i)
    newfile = open("/home/versuch1.txt", "a")
    newfile.write(i)
    newfile.close()
Und das klappt so wie ich es haben wollte.

Re: Zeile in Textdatei löschen

Verfasst: Freitag 20. Juli 2018, 16:53
von Sirius3
Ist ist ziemliche Verschwendung, die Datei für jede Zeile nochmal neu zu öffnen. fobj ist kein File-Objekt sondern eine Liste mit Strings. i ist kein Index sondern ein Zeile.

Code: Alles auswählen

with open("/home/versuch.txt") as lines:
    with open("/home/versuch1.txt", "w") as output:
        _ = next(lines) # skip first line
        output.writelines(lines)

Re: Zeile in Textdatei löschen

Verfasst: Freitag 20. Juli 2018, 17:04
von __blackjack__
@egon11: Glaube ich nicht. Jedenfalls nicht wenn man das mehr als einmal laufen lässt oder `/home/versuch1.txt` aus einem anderen Grund vorher schon existiert.

Re: Zeile in Textdatei löschen

Verfasst: Freitag 20. Juli 2018, 18:53
von egon11
Danke für die Hilfe.