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

我能够非常接近所需的输出.问题是我无法摆脱最后的空白行.我认为这与最后一行有关.例如,' 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')
Run Code Online (Sandbox Code Playgroud)
在\n本质上意味着"创造另一条线"
所以当你删除了所有的\n行时,仍然有前一行
the lines below me should be gone\n
Run Code Online (Sandbox Code Playgroud)
这又意味着"创建另一条线",超出了您已经删除的线
既然你说你不能使用rstrip,你就可以结束循环了
file_out[-1] = file_out[-1].strip('\n')
Run Code Online (Sandbox Code Playgroud)
\n从最后一个元素中删除.因为\n不能存在于一行中的任何其他地方,rstrip并且strip会产生相同的效果
或者没有任何 strip或endswith:
if file_out[-1][-1] == '\n':
file_out[-1] = file_out[-1][:-1]
Run Code Online (Sandbox Code Playgroud)
请注意,这\n是一个单个字符,序号0x0a为十六进制,而不是两个字符,\和n,0x5c和0x6e.这就是我们使用-1而不是使用的原因-2
| 归档时间: |
|
| 查看次数: |
12275 次 |
| 最近记录: |