从下面的配置中,我需要提取主机名和组名邻居x.x.x.x信息,
-设置系统主机名devicename_ABC
-设置协议bgp组内部组名称类型
设置协议bgp组组名邻居x.x.x.x
-set协议bgp group组名邻居z.z.z.z
我在python脚本下面编写了代码,但显示索引错误。请帮助我解决这个问题。
Python脚本:
reDeviceName = re.compile(r'#\s*\n\s*host (\S*)\s*',re.DOTALL)
deviceName = reDeviceName.findall(allText)
regBbpGroup = re.compile(r'\s*bgp group (\S*)\s*',re.DOTALL)
bpGroupList = regBbpGroup.findall(allText)
numBbpGroup = len(bpGroupList)
i = 0
def temp(x):
return x
while i < numBbpGroup:
requiredInfo = list(map(temp,bpGroupList[i]))
requiredInfo.insert(0,deviceName[0]) (index error showing for this line)
bpGroupList = str(requiredInfo[2])
i = i + 1
答案 0 :(得分:0)
numBbpGroup = len(bpGroupList) - 1
使用它,它将对您很好。 python中的Length函数从1开始计数,数组索引从0开始
答案 1 :(得分:0)
编辑:这不是当前IndexError
的原因,但是,如果仅修复设备名称字符串regex表达式,则当{{1 }}。
将您的bpGroupList[i]
循环更改为i = len(bpGroupList)
循环。另一个答案建议从您的while
变量中减去1,但是该变量的名称会引起误解。 for
函数旨在以这种numBbpGroup
方式进行操作。所以不用说
range
你可以说
minus 1
,它将正常工作。 while i < numBbpGroup:
...
i = i + 1
将从1上升到for i in range(numBbpGroup):
...
,在for循环版本中,您不需要递增i
。
编辑:我觉得您的设备名称变量是一个空字符串,这是导致您看到索引错误的原因。
答案 2 :(得分:0)
您可以尝试使用这种积极的后向正则表达式吗?我假设您要在字符串host-name
之后进行测试。
reDeviceName = re.compile(r'(?<=host-name).*')