我试图从文本文件中删除空行,所以如果我有例如:
line 1
line 2
line 3
line 4
line 5
处理文件后的结果应该如下所示:
line 1
line 2
line 3
line 4
line 5
我搜索了堆栈溢出,这是我目前得到的结果:
with open('file.txt', 'r+', encoding='utf-8') as file:
for line in file:
if line.strip():
file.write(line)
除了有一点不方便之外,这工作得很好;不是用新内容替换原始内容,而是将结果附加到文件末尾,如下所示:
line 1
line 2
line 3
line 4
line 5line 1
line 2
line 3
line 4
line 5
我的问题是,是否有任何方法可以在没有外部存储的情况下修复for循环内部的这个问题(将结果存储在文件或列表中并将其写回文件)?或者如果有更好的方法,请分享。
我希望我的问题很清楚,谢谢。这里是一个工作的例子,做你正在寻找的。我不确定这里的性能,但可以肯定的是它不使用内存或临时文件
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()
首先,输出被附加到文件中,因为您以r+
模式打开文件,并且文件指针指向文件的末尾。但是,在读取文件时不希望覆盖该文件,因此实际上需要两个文件:
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)