-1

私はPythonの初心者です。ログに繰り返し文字列を含む大きなファイルがあります

例:

abc
def
efg
gjk
abc
def
efg
gjk
abc
def
efg
gjk
abc
def
efg
gjk

期待される結果

--------------------Section1---------------------------
abc
def
efg
gjk
--------------------Section2---------------------------
abc
def
efg
gjk
--------------------Section3---------------------------
abc
def
efg
gjk
--------------------Section4---------------------------
abc
def
efg
gjk

これを進めるための指針を私に提供してくれる人もいます。特定の文字列に対してgrepを試しましたが、特定の順序で文字列のみが表示されます。abc から gjk までのログ全体をセクションに入れたい。

4

3 に答える 3

2

セクションが開始行で定義されている場合、ジェネレーター関数を使用して、入力 iterable からセクションを生成できます。

def per_section(iterable):
    section = []
    for line in iterable:
        if line.strip() == 'abc':
            # start of a section, yield previous
            if section:
                yield section
            section = []

        section.append(line)

    # lines done, yield last
    if section:
        yield section

これを入力ファイルで使用します。たとえば、次のようになります。

with open('somefile') as inputfile:
    for i, section in enumerate(per_section(inputfile)):
        print '------- section {} ---------'.format(i)
        print ''.join(section)

セクションが単純に行数に基づいている場合は、itertoolsグルーパー レシピを使用して、入力 iterable を固定長のグループにグループ化します。

from itertools import izip_longest

def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

with open('somefile') as inputfile:
    for i, section in enumerate(grouper(inputfile, 4, '\n')):
        print '------- section {} ---------'.format(i)
        print ''.join(section)
于 2013-08-04T08:14:15.527 に答える
0

既知の開始点があるため、セクションの開始を確認するたびにセクション ヘッダーをトリガーできます。

>>> section = 0
>>> with open('bigdata.txt') as f:
        for line in f:
            if 'abc' in line:
                section += 1
                print ('Section' + str(section)).center(55, '-')
            print line


------------------------Section1-----------------------
abc
def
efg
gjk
------------------------Section2-----------------------
abc
def
efg
gjk
------------------------Section3-----------------------
abc
def
efg
gjk
------------------------Section4-----------------------
abc
def
efg
gjk
于 2013-08-04T08:12:02.433 に答える