Normalerweise würden Sie die Eingabedatei öffnen und die nicht leeren Zeilen in eine zweite Datei schreiben:
with open('file.tsv') as infile, open('filtered_file.tsv', 'w') as outfile:
for line in infile:
if line.strip():
outfile.write(line)
Wenn Sie die Datei direkt filtern möchten, können Sie FileInput
verwenden mit dem inplace
Möglichkeit:
import fileinput
for line in fileinput.FileInput("infile", inplace=1):
if line.strip():
print line
Dies verwendet jedoch eine Zwischendatei und funktioniert möglicherweise nicht in Situationen mit wenig Speicherplatz.
Um die Datei an Ort und Stelle zu filtern, ohne zusätzlichen Speicherplatz zuzuweisen, könnten Sie Folgendes versuchen:
with open('file.tsv', 'r+') as infile:
read_pos = write_pos = 0
line = infile.readline()
while line:
read_pos += len(line)
if line.strip():
infile.seek(write_pos)
infile.write(line)
write_pos += len(line)
infile.seek(read_pos)
line = infile.readline()
# update file size to the new, possibly reduced, size
infile.truncate(write_pos)