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

Python-删除文件末尾的空白文本行,python,python-3.x,Python,Python 3.x,我正在编写一个脚本来修改任何文本文件。它用空行替换空白行。它擦除文件末尾的空行。图中显示了我想要的输出 我能够非常接近期望的输出。问题是我不能去掉最后一个空行。我想这和最后一行有关。e、 g'我下面的行应该消失实际上看起来像这样'我下面的行应该消失\n'看起来像是在前一行上创建了新行。例如,如果第4行的代码为>>N< /代码>,行5实际上是空白行,而不是第4行。 我应该注意,我不能使用rstrip或strip 我的代码到目前为止 def clean_file(filename): #

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

我能够非常接近期望的输出。问题是我不能去掉最后一个空行。我想这和最后一行有关。e、 g
'我下面的行应该消失
实际上看起来像这样
'我下面的行应该消失\n'
看起来像是在前一行上创建了新行。例如,如果第4行的代码为>>N< /代码>,行5实际上是空白行,而不是第4行。

我应该注意,我不能使用
rstrip
strip

我的代码到目前为止

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

\n
的基本意思是“创建另一行”

因此,当您删除了
\n
中的所有行时,仍有前一行

the lines below me should be gone\n
这同样意味着“创建另一行”,超出您已经删除的行

既然您说您不能使用
rstrip
,那么您可以使用

file_out[-1] = file_out[-1].strip('\n')
从最后一个元素中删除
\n
。因为
\n
不能存在于一行中的任何其他位置,
rstrip
strip
将具有相同的效果

或不带任何
条带
结束

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

请注意,
\n
是单个字符,序数
0x0a
为十六进制,而不是两个字符
\
n
,序数
0x5c
0x6e
。这就是为什么我们使用
-1
而不是
-2

你在这个问题上做了很多研究,而且非常清楚+1.为什么“不能”你使用
.rstrip()
?@KarlKnechtel那太容易了这是家庭作业吗?@Vader那么我怀疑你可以使用
文件输出[-1][-1]='\n'
@Vader你为什么想使用
-2
<代码>'\n'是一个字符。@Vader
'\n'
是一个写有“换行符”的字符。反斜杠(
'\')
是一种转义,用于将其与常规的
'n'
@Vader区分开来,这样解析器就不会将其混淆为常规的
'n'
。转义时,解析器将看到的
'\n'
读取为一个字符,即“换行符”,而不是斜杠和“n”。@Vader Right。另一个例子是空字符<代码>'\0'不是斜杠和零的两个字符,而是整数值
0
的单个字节(也不是零字符)。