Biasanya Anda akan membuka file input dan menulis baris yang tidak kosong ke file kedua:
with open('file.tsv') as infile, open('filtered_file.tsv', 'w') as outfile:
for line in infile:
if line.strip():
outfile.write(line)
Jika Anda ingin memfilter file di tempat, Anda dapat menggunakan FileInput
dengan inplace
pilihan:
import fileinput
for line in fileinput.FileInput("infile", inplace=1):
if line.strip():
print line
namun, ini menggunakan file perantara dan mungkin tidak berfungsi dalam situasi ruang disk yang rendah.
Untuk memfilter file di tempat tanpa mengalokasikan ruang disk tambahan, Anda dapat mencoba sesuatu seperti ini:
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)