Python:打string时从文本文件中打印下一行x行

情况如下:

我有一个.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作为变量,因为它是内置函数的名称。