所以说我有这样的文字:
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']
它捕获了一些但并非全部。
答案 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']