5

状況は次のとおりです。

いくつかのnslookupの結果を含む.txtファイルがあります。

ファイルをループしたいのですが、「Non-authoritative answer:」という文字列にヒットするたびに、スクリプトはその位置から次の8行を出力する必要があります。それがうまくいくなら、私は私の画面ですべての肯定的な結果を得る必要があります:)。

最初に私は次のコードを持っていました:

#!/bin/usr/python

file = open('/tmp/results_nslookup.txt', 'r')
f = file.readlines()

for positives in f:
        if 'Authoritative answers can be found from:' in positives:
                print positives
file.close()

しかし、それは「権威ある答えは以下から見つけることができます:」と印刷されたものだけです。

私が今持っているコード:

#!/bin/usr/python

file = open('/tmp/results_nslookup.txt', 'r')
lines = file.readlines()

i = lines.index('Non-authoritative answer:\n')

for line in lines[i-0:i+9]:
        print line,

file.close()

しかし、実行すると、最初の結果が画面にうまく印刷されますが、他の肯定的な結果は印刷されません。

ps私はsocket.gethostbyname( "foobar.baz")を知っていますが、最初にこの基本的な問題を解決したいと思います。

前もって感謝します!

4

2 に答える 2

7

ファイルをイテレータとして使用し、文が見つかるたびに次の8行を印刷できます。

with open('/tmp/results_nslookup.txt', 'r') as f:
    for line in f:
        if line == 'Non-authoritative answer:\n':
            for i in range(8):
                print(next(lines).strip())

ファイルオブジェクトでnext()関数を使用する(またはループでforループする)たびに、最後の行を読み取るまで、そのファイルの次の行が返されます。

range(8)forループの代わりに、実際に使用しますitertools.islice

from itertools import islice

with open('/tmp/results_nslookup.txt', 'r') as f:
    for line in f:
        if line == 'Non-authoritative answer:\n':
            print(''.join(islice(f, 8)))
于 2012-10-04T12:33:42.227 に答える
4
file = open('/tmp/results_nslookup.txt', 'r')
for line in file:
    if line=='Non-authoritative answer:\n':
        for _ in range(8):
            print file.next()

ちなみに、file変数の名前は組み込み関数の名前であるため、使用しないでください。

于 2012-10-04T12:33:52.197 に答える