情况如下:
我有一个.txt文件,几个nslookups的结果。
我想循环tru文件,每遇到string“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()
但是,只有打印“权威的答案可以find:”在.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()
但是当我运行它时,它将第一个结果很好地打印到我的屏幕上,但不打印其他结果。
PS我知道socket.gethostbyname(“foobar.baz”),但首先我想解决这个基本问题。
先谢谢你!
您可以使用该文件作为迭代器,然后每次找到您的句子时打印下面的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 lines.next().strip()
每次在文件对象上调用.next()
或者在for
循环中循环时,它都会返回该文件中的下一行,直到读完最后一行。
而不是循环range(8)
,我实际上使用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))
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
作为变量,因为它是内置函数的名称。