情况如下:
我有一个带有几个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”),但首先我要解决这个基本问题。
提前谢谢!
答案 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
用于变量,因为它是内置函数的名称。