如何删除换行符并在列表中保存不是空行?

时间:2013-10-27 23:01:45

标签: python text line-breaks

我有一个文本文件(称为霍比特人)。 我需要使用命令rstrip()从该文档中删除换行符。 我这样做是为了删除换行符。

clear_lines = []

for line in hobbit:
    clear_lines = line.rstrip('\n')

(我不确定这一步是否正确,有没有办法验证它?)

现在我需要在列表中保存非空行。 我该怎么做?

2 个答案:

答案 0 :(得分:0)

在循环中,您需要将行追加到列表中。分配操作在那里没有意义。

clear_lines.append(line.rstrip('\n'))

如果您想省略非空行,请在追加之前检查该条件:

line = line.rstrip('\n')
if (len(line) != 0):
   ...

你的程序中的“空行”是什么?你认为只有空格的行是空的吗?如果是,则在检查长度之前删除所有“空白”字符。

答案 1 :(得分:0)

您可以为此

使用列表推导
clear_lines = [line.rstrip('\n') for line in hobbit]

要验证这是否有效,您可以查看并检查是否有任何行以'\n'

结尾
any(line.endswith('\n')  for line in clear_lines)

应该返回false。如果你愿意,可以assert这个。 添加检查,例如查看行是否为空,可以添加到上面的列表推导中。

举个例子:

hobbit = ['hello','world','there\n','\n']
clear_lines = [line.rstrip('\n') for line in hobbit if len(line.rstrip('\n')) > 0]

clear_lines包含值:

['hello', 'world', 'there']

在你的情况下,假设文件被称为hobbit.txt并保存在与python文件相同的目录中,那么:

with open('hobbit.txt','rb') as hobbit:
    clear_lines = [line.rstrip('\n') for line in hobbit if len(line.rstrip('\n')) > 0]
assert(not any(line.endswith('\n')  for line in clear_lines))

断言再次完全是可选的,主要用于调试目的。