2016-07-05 19 views
1

ich leere Zeilen aus einer Textdatei zu entfernen, ich versuche, so, wenn ich zum Beispiel:Streifen Leerzeilen aus einer Textdatei

line 1 
line 2 

line 3 


line 4 
line 5 

Das Ergebnis nach der Verarbeitung der Datei sollte wie folgt aussehen:

line 1 
line 2 
line 3 
line 4 
line 5 

ich suchte Stack-Überlauf, und das ist, was ich mit so weit kam heraus:

with open('file.txt', 'r+', encoding='utf-8') as file: 
    for line in file: 
     if line.strip(): 
      file.write(line) 

Das funktionierte perfekt außer fo r ein wenig unbequem; stattdessen den ursprünglichen Inhalt mit dem neuen zu ersetzen, wird das Ergebnis an das Ende der Datei angehängt wie folgt:

line 1 
line 2 

line 3 


line 4 
line 5line 1 
line 2 
line 3 
line 4 
line 5 

Meine Frage ist, gibt es eine Möglichkeit, dieses Problem innerhalb der for-Schleife beheben kann ohne externe Speicher (speichert das Ergebnis in einer Datei oder Liste und schreibt es zurück in die Datei)? oder wenn es einen besseren Weg gibt, bitte teilen.

Ich hoffe, meine Frage war klar und danke.

+1

Öffnen Sie eine zweite Datei zu verwenden. Dann bei Fertigstellung löschen Sie die erste Datei und benennen Sie sie um, um den ursprünglichen Namen zu ersetzen –

+0

Siehe diesen Beitrag: http://stackoverflow.com/questions/2369440/how-to-delete-all-blank-lines-in-the-file-with- die-help-of-python –

+0

netter Trick danke – user3885884

Antwort

1

Zuerst wird die Ausgabe an die Datei angehängt, weil Sie die Datei im Modus r+ öffnen und der Dateizeiger auf das Ende der Datei zeigt. Sie werden nicht die Datei überschrieben werden soll, während Sie es lesen, obwohl, so dass Sie wirklich brauchen zwei Dateien:

with open('infile.txt', 'r', encoding='utf-8') as inFile,\ 
    open('outfile.txt', 'w', encoding='utf-8') as outFile: 
    for line in inFile: 
     if line.strip(): 
      outFile.write(line) 
+0

Ich hoffte, es gab einen Weg, das zu vermeiden, aber das ist in Ordnung. Vielen Dank. – user3885884

+0

Kein Problem, froh zu helfen! :) Sie können die Originaldatei immer mit der neu erstellten Datei überschreiben, nachdem Sie sie geschrieben haben. Dies hat den zusätzlichen Vorteil, dass Sie Datenverlust vermeiden können, wenn etwas schief geht. – Will

2

Hier ist ein funktionierendes Beispiel, das zu tun, was Sie suchen. Ich bin nicht sicher, hier über die Leistung aber sicher ist es nicht die Erinnerung oder temporäre Datei für die Ausgabe

writebytecount = 0 
readbytecount = 0 
with open('file2.txt', 'r+') as file: 
    while 1: 
     line = file.readline() 
     if not line: break 
     readbytecount = file.tell() 
     file.seek(writebytecount) 
     file.write(line) 
     if len(line.strip()) != 0: 
      writebytecount += len(line)+1 
     file.seek(readbytecount) 
    file.seek(writebytecount) 
    file.truncate(writebytecount) 
    file.close() 
Verwandte Themen