1

このサンプルでは、​​ファイル内の文字列を検索し、一致する行を別のファイルに書き込みます。それが基本であり、現時点で私ができることです。

fd_w = open('tt', 'w')
with open('r.0', 'r') as IRR:
    for line in IRR:
        if 'status: ASSIGNED PA' in line:
            towrite = "%s" % (line)
fd_w.write(towrite)   
fd_w.close()

私が本当にやりたいのは、一致する行がある場合、一致する行の前の行をスペースができるまで取得し、同様に一致する行の後の行をスペースができるまで取得することです。

これは、読み取られているファイルのサンプルです。

admin-c:        DUMY-RIPE
tech-c:         DUMY-RIPE
status:         ASSIGNED PA
mnt-by:         AS6667-MNT

admin-c:        DUMY-RIPE
tech-c:         DUMY-RIPE
status:         ASSIGNED PA
mnt-by:         DATANET-NOC

行に一致した後に前の行と次の行を取得するなど、2つの関数を定義する方法を整理しようとしています。したがって、任意のアイデア、任意のヘルプは非常に適切です。

4

2 に答える 2

2

空の行で区切られたブロックでデータを読み取り、その後ステータスをテストします。

with open('r.0', 'r') as IRR, open('tt', 'w') as fd_w:
    lines = []
    for line in IRR:
        line = line.strip()
        if line:
            lines.append(line)
        else:
            # empty line, found a complete block, test for status line
            if 'status:         ASSIGNED PA' in lines:
                for line in lines:
                    fd_w.write(line + '\n')
            lines = []
于 2013-03-04T12:49:48.190 に答える
0

バッファーを作成し、変数を保持して、そのバッファーに一致があったかどうかを示します。

たとえば、リストを使用して、ファイルの読み取りを開始するときにバッファーを開始します。

別のスペースが得られるまで、そのリストにすべてを追加します。その間に一致が見つかった場合は、変数を使用してその事実を追跡します。

最終的に別の空間に到達したとき、変数が true の場合、そのバッファを使用して、必要なことを行います。つまり、別のファイルに書き込みます。

バッファをリセットして、やり直してください。

これをファイルの最後まで行います。

于 2013-03-04T12:46:25.713 に答える