在Python中用空行分隔的连接行

2024-09-28 19:23:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用python重新格式化以下文本:

text = """17/05/2013 10:09:15,INFO,xxxxxxxxxx
yyyyyy
zzzzzz

17/05/2013 10:09:15,INFO,xxxxxxxx
yyyyyyy
zzzzzzz"""

将它们格式化为

17/05/2013 10:09:15,INFO,xxxxxxxxxxyyyyyyzzzzzz
17/05/2013 10:09:15,INFO,xxxxxxxxyyyyyyyzzzzzzz

我试过这个:

def strip(txt):
ret=""
for l in txt.split("\n"):
    if l.strip() in ['\n', '\r\n']:
        ret = ret + "\n"
            else:
            ret = ret + l.strip()
print ret

但事实证明,代码无法识别空行,结果如下:

17/05/2013 10:09:15,INFO,xxxxxxxxxxyyyyyyzzzzzz17/05/2013 
10:09:15,INFO,xxxxxxxxyyyyyyyzzzzzzz

我该怎么解决这个问题?你知道吗


Tags: textin文本infotxtstripretxxxxxxxxxx
3条回答

我想我可以试试itertools.groupby

from itertools import groupby
lines = text.splitlines()
def is_blank(x):
    return bool(x.strip())
print '\n'.join(''.join(v) for b,v in groupby(lines,is_blank) if b)

这最终对组之间任何数量的空行都是不敏感的。你知道吗

>>> import re
>>> text = """17/05/2013 10:09:15,INFO,xxxxxxxxxx
yyyyyy
zzzzzz

17/05/2013 10:09:15,INFO,xxxxxxxx
yyyyyyy
zzzzzzz"""
>>> print re.sub('\n(?!\n)', '', text)
17/05/2013 10:09:15,INFO,xxxxxxxxxxyyyyyyzzzzzz
17/05/2013 10:09:15,INFO,xxxxxxxxyyyyyyyzzzzzzz

您可以将文本拆分为两个,因为两个文本都由两行新行分隔:

>>> mylist = text.split('\n\n')

然后只打印每个值,去掉一堆字母之间的新行:

>>> for i in mylist:
...     print i.replace('\n','')
... 
17/05/2013 10:09:15,INFO,xxxxxxxxxxyyyyyyzzzzzz
17/05/2013 10:09:15,INFO,xxxxxxxxyyyyyyyzzzzzzz

或者,如果要将每一行存储在列表中,请使用列表:

>>> [i.replace('\n','') for i in mylist]
['17/05/2013 10:09:15,INFO,xxxxxxxxxxyyyyyyzzzzzz', '17/05/2013 10:09:15,INFO,xxxxxxxxyyyyyyyzzzzzzz']

相关问题 更多 >