Thông thường, bạn sẽ mở tệp đầu vào và ghi các dòng không trống vào tệp thứ hai:
with open('file.tsv') as infile, open('filtered_file.tsv', 'w') as outfile:
for line in infile:
if line.strip():
outfile.write(line)
Nếu bạn muốn lọc tệp tại chỗ, bạn có thể sử dụng FileInput
với inplace
tùy chọn:
import fileinput
for line in fileinput.FileInput("infile", inplace=1):
if line.strip():
print line
tuy nhiên, điều này sử dụng tệp trung gian và có thể không hoạt động trong các trường hợp dung lượng ổ đĩa thấp.
Để lọc tệp tại chỗ mà không phân bổ thêm bất kỳ dung lượng ổ đĩa nào, bạn có thể thử một cái gì đó như sau:
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)