我正在编写一个修改任何文本文件的脚本。它用空行替换空白行。它会删除文件末尾的空白行。图像显示了我想要的输出。
我能够非常接近所需的输出。问题是我无法摆脱最后的空白行。我认为这与最后一行有关。例如' 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')
答案 0 :(得分:6)
\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
,序数{{1 }和0x5c
。这就是我们使用0x6e
而非-1