Python:在击中字符串时从文本文件中打印下一行x行

时间:2012-10-04 12:29:59

标签: python linux

情况如下:

我有一个带有几个nslookups结果的.txt文件。

我想循环使用文件,每次遇到字符串“非权威性答案:”脚本必须从那个位置打印以下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()

但是那只印刷了“权威性答案可以从以下内容中找到:”它在.txt中的时间。

我现在拥有的代码:

#!/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()

但是当我运行它时,它会很好地将第一个结果打印到我的屏幕上,但不打印其他正面结果。

P.S。我知道socket.gethostbyname(“foobar.baz”),但首先我要解决这个基本问题。

提前谢谢!

2 个答案:

答案 0 :(得分:6)

您可以将文件用作迭代器,然后在每次找到句子时打印下面的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() function(或在for循环中对其进行循环)时,它都会返回该文件中的下一行,直到您“#{0}为止。我读了最后一行。

而不是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)))

答案 1 :(得分:3)

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用于变量,因为它是内置函数的名称。