我正在编写一个修改任何文本文件的脚本。它用空白行替换空白行。它删除文件末尾的空白行。该图像显示了我想要的输出。
我能够非常接近所需的输出。问题是我无法摆脱最后一个空行。我认为这与最后一行有关。例如 ' the lines below me should be gone
实际上看起来像这样 ' the lines below me should be gone\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
将具有相同的效果
或者没有任何 strip
或endswith
:
if file_out[-1][-1] == '\n':
file_out[-1] = file_out[-1][:-1]
注意\n
是单个字符,序号0x0a
为十六进制,不是两个字符\
和n
,序数 0x5c
和 0x6e
。这就是我们使用 -1
而不是 -2
关于Python - 删除文件末尾的空白文本行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21446153/