1

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

これを解決するにはどうすればよいですか?

4

5 に答える 5

2
>>> 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
于 2013-05-17T03:11:21.777 に答える
1

私は試してみるかもしれないと思います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)

これは、望ましいかもしれないグループ間の任意の数の空白行に影響されなくなります。

于 2013-05-17T03:00:40.853 に答える
1

快適に感じる場合regular expressions

In [5]: import re
In [6]: print re.sub('[^\n]\n', '', text)
17/05/2013 10:09:15,INFO,xxxxxxxxxyyyyyzzzzz
17/05/2013 10:09:15,INFO,xxxxxxxyyyyyyzzzzzzz 
于 2013-05-17T03:12:01.840 に答える
0
import re

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

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

pat = '(\d\d/\d\d/\d{4} \d\d:\d\d:\d\d,INFO,.*)\n(.*)\n(.*)'
regx = re.compile(pat)

print text
print '\n===================\n'
print '\n'.join('%s,%s,%s' % x for x in regx.findall(text))

編集

jamylak のソリューションは、私のソリューションよりも優れています。ただし、正規表現パターンを次のように改善して、複数の空行の連続をなくすことができます。

>>> 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+(?=\n)|\n(?!\n)', '', text)
17/05/2013 10:09:15,INFO,xxxxxxxxxxyyyyyyzzzzzz
17/05/2013 10:09:15,INFO,xxxxxxxxyyyyyyyzzzzzzz
于 2013-05-17T03:17:01.670 に答える