Zeilen bis zu einer Zeile (z.b. 30000) einer Datei löschen Python3?
Wie kann ich bei einer Datei alle Zeilen bis zur Zeile z.b. 30000 löschen in Python3???
LG
2 Antworten
dateiText = open("datei.txt", "r") # r steht füt read, also lesen
dateiTextListe = dateiText.split("\n") # macht den gesamten Text in eine Liste in der ein Item einer Zeile entspricht
index = 0
while index < 30000:
del dateiTextListe[0]
index += 1
dateiText.close()
dateiText = open("datei.txt", "w")# w steht für write
index = 0
dateiTextNeu = ""
while index < len(dateiTextListe):
dateiTextNeu += dateiTextListe[index] + "\n"
index += 1
dateiText.write(dateiTextListe)
dateiText.close()
So ich hoffe einfach Mal das klappt :)
Habe es selber nicht ausprobiert also versuch es am besten erstmal mit einer Kopie deiner Datei
Danke!!! <10 bedeutet doch in deinem Code bis Zeile 10 löschen oder???
Ja, einfach auf 30000 machen, dann sollte das klappen :)
Dieses Programm dauert aber lange bis es fertig ist... ist das normal???
Sind immerhin 30000 Zeilen und vermutlich nicht der aller effizienteste Code. Aber länger als ein paar Minuten sollte das eigentlich nicht dauern, denke ich.
Wird die Datei dort überschrieben oder ist dort ein Fehler im Code???
Ich bin zwar kein Pythonproger, aber warum den eingelesen Text zweimal abgrasen?
Das löschen der Arrayfelder ist Zeitverschwendung.
dateiText = open("test.txt", "r") # r steht füt read, also lesen
dateiTextListe = dateiText.read().split("\n") # macht den gesamten Text in eine Liste in der ein Item einer Zeile entspricht
# index auf erste neu zu schreibende Zeile, und ab geht die Luzie...;p
# die ersten 10 bzw 30000 Zeilen interessieren doch keinen mehr einfach vergessen...
index = 10
dateiTextNeu = ""
while index < len(dateiTextListe):
dateiTextNeu += dateiTextListe[index] + "\n"
index += 1
dateiText.write(dateiTextNeu)
dateiText.close()
FEHLER: Traceback (most recent call last):
File "C:/Users/NAME/Desktop/test.py", line 2, in <module>
dateiTextListe = dateiText.split("\n") # macht den gesamten Text in eine Liste in der ein Item einer Zeile entspricht
AttributeError: '_io.TextIOWrapper' object has no attribute 'split'
Was ist da der Fehler???
dateiTextListe =dateiText.read().split("\n")
so ist das dann richtig...
Aber ich merke gerade das der Code nicht wirklich funktioniert :(
Ich schick dir gleich mal ein Update
Alternative Möglichkeit von StackOverflow, die wohl ein wenig performanter sein sollte:
n = 30000
nfirstlines = []
with open("input.txt") as f, open("tmp.txt", "w") as out:
for x in xrange(n):
nfirstlines.append(next(f))
for line in f:
out.write(line)
os.remove("input.txt")
os.rename("tmp.txt", "input.txt")
"n" ist hier die Anzahl der Zeilen, "input.txt" ist zu ersetzen durch den Dateinamen. "tmp.txt" ist nur eine temporäre Arbeitsdatei.
Wenn es nicht unbedingt Python sein muss, wäre "tail" auf Linux weitaus schneller:
tail -n +30000 input.txt > output.txt
So funktioniert es jetzt bei mir