从文本文件中删除空白行



我试图从文本文件中删除空行,所以如果我有例如:

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)

相关内容

  • 没有找到相关文章