我有一个小的Python脚本,它调用一个配置文件和一个列表.列表被用作搜索配置文件的模式.列表只是IP地址,脚本运行,但它只找到列表中的第一个IP,它没有通过每个步骤来搜索配置。
谁能告诉我我缺少了什么?我试着调用一个函数,但它仍然只找到列表中的第一个IP。
import re
list=['10.100.81.118',
'10.100.81.113',
'10.100.81.112',
'10.100.81.117',
'10.100.81.9',
'10.100.81.116',
'10.100.81.114',
'10.100.81.115',
'10.100.81.111',
'10.100.81.10',
'10.100.81.1']
config=open('show_run.txt','r')
for items in list:
for answers in config:
re2 = re.findall(items, answers, re.MULTILINE)
if re2:
print('\n'.join(re2))
正如@DaveStSomeWhere所提到的,如果不读取文件数据,则需要在每次循环中重置文件到初始位置。
所以,你可以做的是将文件内容读到一个变量中,然后在该变量中寻找匹配。
import re
ip_list=['10.100.81.118', '10.100.81.113', '10.100.81.112',
'10.100.81.117', '10.100.81.9', '10.100.81.116',
'10.100.81.114', '10.100.81.115', '10.100.81.111',
'10.100.81.10', '10.100.81.1']
config= open('show_run.txt', 'r')
configdata = config.read()
for items in ip_list:
re2 = re.findall(items, configdata, re.MULTILINE)
if re2:
print('\n'.join(re2))
或者干脆你可以不用re模块来做。
for items in ip_list:
if items in configdata:
print('\n'.join(items))
Regex实际上可以帮助你同时搜索列表中的所有项目。
import re
my_list = ['10.100.81.118', '10.100.81.113', '10.100.81.112',
'10.100.81.117', '10.100.81.9', '10.100.81.116',
'10.100.81.114', '10.100.81.115', '10.100.81.111',
'10.100.81.10', '10.100.81.1']
pattern = r'({})'.format('|'.join(my_list))
print (pattern)
example1 = 'this is an ip address: 10.100.81.9 10.100.81.9 and this is another: 10.100.81.113'
example2 = 'this is an ip address: 10.100.81.10 and this is another: 10.100.81.113'
config = [example1, example2]
for answers in config:
res = re.findall(pattern, answers)
print (res)