摆脱行间的所有空白区域

时间:2012-01-15 19:51:29

标签: python

所以说我有这样的文字:

line num 1
line num 2

line num 3



line num 4

我试图摆脱第2行和第3行以及第3行和第4行之间的所有新行,同时将所有行号放在不同的新行上。我怎么做到这一点?我已经尝试过puth =将它们放入一个列表然后循环遍历它们并取出所有单独的'\ n'

例如:

obj=['line num 1','line num 2','\n','line num 3','\n','\n','line num4']
a=-1
for i in obj:
    a+=1
    if i=='\n':
        print 'yes'
        del obj[a]


print obj

输出:

['line num 1', 'line num 2', 'line num 3', '\n', 'line num4']

它捕获了一些但并非全部。

5 个答案:

答案 0 :(得分:4)

简而言之:迭代列表时不要擦除元素。

您可以在这里找到很多方法:Remove items from a list while iterating

注意:这可能是最短和最pythonic:

filter(lambda x: x!='\n', obj)

答案 1 :(得分:1)

我只是在整个文件内容上使用正则表达式:

>>> s = """line num 1
line num 2

line num 3



line num 4"""
>>> import re
>>> print re.sub('\n+', '\n', s)
line num 1
line num 2
line num 3
line num 4

P.S。您应该在迭代时更新更新列表。

答案 2 :(得分:1)

也许if not item.isspace()为您提供了更具可读性的内容:

>>> obj = ['line num 1', 'line num 2', '\n', 'line num 3', '\n', '\n', 'line num4']

>>> [item for item in obj if not item.isspace()]

['line num 1', 'line num 2', 'line num 3', 'line num4']
>>> 

答案 3 :(得分:0)

def remove_new_line(obj):
    if "\n" in obj:
        obj.remove("\n")
    remove_new_line(obj)
    return obj

obj = ['line num 1', 'line num 2', '\n', 'line num 3', '\n', '\n', 'line num4']

print remove_new_line(obj)

答案 4 :(得分:0)

你也可以试试这个:

f = open("your file.txt",'r')
values = f.read()
val = re.split(r"\n+",values)
print val

output = ['line num 1', 'line num 2', 'line num 3', 'line num 4']