从文本文件中剥离空白行

时间:2016-07-05 18:41:21

标签: python file

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

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循环中解决这个问题(将结果存储在文件或列表中并将其写回文件)?或者如果有更好的方式请分享。

我希望我的问题很明确,谢谢。

2 个答案:

答案 0 :(得分:2)

这是一个可以满足您需求的工作示例。 我不确定这里的性能,但肯定它不使用内存或临时文件

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()

答案 1 :(得分:1)

首先,输出被附加到文件中,因为您以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)