Python - 删除文件末尾的空白行

时间:2014-01-30 01:21:11

标签: python python-3.x

我正在编写一个修改任何文本文件的脚本。它用空行替换空白行。它会删除文件末尾的空白行。图像显示了我想要的输出。

enter image description here

我能够非常接近所需的输出。问题是我无法摆脱最后的空白行。我认为这与最后一行有关。例如' the lines below me should be gone实际上看起来像这样' the lines below me should be gone\n'看起来在前一行创建了新行。例如,如果第4行的\n比第5行的实际上是空白行而不是第4行。

我应该注意,我无法使用rstripstrip

到目前为止我的代码。

def clean_file(filename):
    # function to check if the line can be deleted
    def is_all_whitespace(line):
        for char in line:
            if char != ' ' and char != '\n':
                return False
        return True

    # generates the new lines
    with open(filename, 'r') as file:
        file_out = []
        for line in file:
            if is_all_whitespace(line):
                line = '\n'
            file_out.append(line)

    # removes whitespaces at the end of file
    while file_out[-1] == '\n':  # while the last item in lst is blank
        file_out.pop(-1)  # removes last element

    # writes the new the output to file
    with open(filename, 'w') as file:
        file.write(''.join(file_out))

clean_file('test.txt')

1 个答案:

答案 0 :(得分:6)

\n实质上意味着“创建另一条线”

所以,当你删除\n的所有行时,仍然有前一行

the lines below me should be gone\n

这又意味着“创建另一条线”,超出了你已经删除的线

由于您说您无法使用rstrip,因此您可以使用

结束循环
file_out[-1] = file_out[-1].strip('\n')

从最后一个元素中删除\n。由于\n无法在一行中的任何其他位置存在,rstripstrip将具有相同的效果

或没有任何 stripendswith

if file_out[-1][-1] == '\n':
    file_out[-1] = file_out[-1][:-1]

请注意,\n是单个字符,序号0x0a为十六进制,两个字符\n,序数{{1 }和0x5c。这就是我们使用0x6e而非-1

的原因