Zeile in Textdatei löschen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Ich möchte die erste Zeile einer Textdatei löschen, ich hab es bis jetzt nicht hinbekommen. Kann mir jemand einen Denkanstoß geben?
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

Du liest die Datei komplett ein und schreibst wieder alles bis auf die erste Zeile.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

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?
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Mit

Code: Alles auswählen

readline()[1:]
?
Benutzeravatar
__blackjack__
User
Beiträge: 13007
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@egon11: Ich würde die erste Zeile beim einlesen schon überspringen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

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()
Benutzeravatar
__blackjack__
User
Beiträge: 13007
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

c) weil man Listen nicht mit `write` schreiben kann.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Ok, und wie könnte ich es verwirklichen?
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Nimmt man in meinen Fall besser "read()" oder "readlines()"?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn du eine ZEILE überspringen willst, dann natürlich readlines.

Und schreiben musst du eben auch wieder jede einzelne Zeile. Da dann mit write.
Benutzeravatar
__blackjack__
User
Beiträge: 13007
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Oder man nimmt die Methode die tatsächlich mehrere Zeilen aus einem iterierbaren Objekt speichern kann.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Oh. Gibts die? Hab sie nie benutzt.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

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.
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

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)
Benutzeravatar
__blackjack__
User
Beiträge: 13007
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Danke für die Hilfe.
Antworten