Bestimmte Zeilenazahl 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
Phobit
User
Beiträge: 185
Registriert: Freitag 4. Mai 2018, 18:13

Hallo,
ganz kurze Frage,
gibt es in Python einen Befehl mit dem ich in einer txt Datei eine bestimmte Anzahl Zeilen (bei 0 angefangen zu zählen) löschen kann?
Danke schonmal im Vorraus :-)
Mir egal, ob der Code schön ist oder nicht.
Hauptsache er funkt!
nezzcarth
User
Beiträge: 1755
Registriert: Samstag 16. April 2011, 12:47

Nein, so was gibt es nicht "in fertig", weil man es ganz leicht selbst programmieren kann. Du kannst die Datei entweder erst komplett einlesen und dann nur die Zeilen zurück schreiben, die erhalten bleiben sollen, oder du schreibst "on the fly" in eine temporäre Datei und ersetzt die Originaldatei zum Schluss. Zum Zählen kannst du 'enumerate' in Kombination mit einer Schleifen oder 'itertools.dropwhile' verwenden.
Bolitho
User
Beiträge: 219
Registriert: Donnerstag 21. Juli 2011, 07:01
Wohnort: Stade / Hamburg
Kontaktdaten:

Code: Alles auswählen

with open("DEINEDATEI.txt") as file:
    f = file.readlines()

f = f[2:]   # "Löscht" die ersten beiden Zeilen / Definiert die Liste neu, ab dem dritten Eintrag
print(f)
suchst du sowas vielleicht?
Phobit
User
Beiträge: 185
Registriert: Freitag 4. Mai 2018, 18:13

ahh, genau sowas, danke...
wenn ich bei f[2:] das zwei durch ne Variable einsetze, muss das dann so ausehen?

Code: Alles auswählen

x = 2
f[x:]
Mir egal, ob der Code schön ist oder nicht.
Hauptsache er funkt!
Bolitho
User
Beiträge: 219
Registriert: Donnerstag 21. Juli 2011, 07:01
Wohnort: Stade / Hamburg
Kontaktdaten:

naja, das lässt sich doch ganz einfach selbst testen, oder?
Phobit
User
Beiträge: 185
Registriert: Freitag 4. Mai 2018, 18:13

Ich hab ein bisschen rumprobiert.
Ich habs in minen Code eingesetzt:

Code: Alles auswählen

with open("TestLog.txt") as getdatei:
    komplett = getdatei.read()
    print(komplett)
    f = komplett[2:]
    print(f)
Dort wird das ganze als Fließtext und nicht als Liste ausgegeben, demnach werden auch nur die ersten beiden Buchstaben mit dem Command abgetrennt.
Gibt es auf dieses Beispiel bezogen eine Möglichkeit, die kompletten ersten beiden Zeilen abzutrennen?
Mir egal, ob der Code schön ist oder nicht.
Hauptsache er funkt!
Benutzeravatar
snafu
User
Beiträge: 6862
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

nezzcarth hat geschrieben: Sonntag 28. Oktober 2018, 15:38 Zum Zählen kannst du 'enumerate' in Kombination mit einer Schleifen oder 'itertools.dropwhile' verwenden.
Würde ich gar nicht so kompliziert machen. Entweder, wie gezeigt, Slicing auf f.readlines() oder alternativ:

Code: Alles auswählen

for _ in range(n):
    # Skip the first n lines
    next(f)
Benutzeravatar
snafu
User
Beiträge: 6862
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@Phobit: Du musst einfach die richtige Methode verwenden. Nicht read(), sondern readlines(). ;-)
Phobit
User
Beiträge: 185
Registriert: Freitag 4. Mai 2018, 18:13

Ja, aber möchte ja read, und nicht readlines

bzw wie sonst krieg ich die Liste wieder zurück als normaler Text in die Datei?
Ich hab das Gefühl ich überseh irgendwas total simples xD
Mir egal, ob der Code schön ist oder nicht.
Hauptsache er funkt!
Sirius3
User
Beiträge: 18267
Registriert: Sonntag 21. Oktober 2012, 17:20

Genauso wie man Zeilen lesen kann, kann man auch Zeilen in eine Datei schreiben.

Code: Alles auswählen

from itertools import islice
with open("input.txt") as lines:
    with open("output.txt", "w") as output:
        output.writelines(islice(lines, 10, None))
Antworten