从下面的配置中,我需要提取主机名和组名邻居x.x信息,
-set系统主机名devicename_ABC
-set协议bgp组-名称类型
-set协议bgp组-名称邻居x.x
-set协议bgp组-名称邻居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发布于 2019-10-09 18:37:07
numBbpGroup = len(bpGroupList) - 1
使用这个,它会对你很好。python中的长度函数从1开始计数,数组索引从0开始。
发布于 2019-10-09 18:42:28
编辑:这不是当前IndexError的原因,但是如果您只修复了您的设备名称字符串正则表达式,那么当您尝试访问i = len(bpGroupList)时,您将得到另一个IndexError。
将while循环更改为for循环。另一个答案是从您的numBbpGroup变量中减去1,但是变量的名称可能会产生误导。range函数被设计为以这种minus 1方式操作。所以不要说
while i < numBbpGroup:
...
i = i + 1你可以说
for i in range(numBbpGroup):
...一切都会好起来的。i将从1上升到不需要在for-循环版本中增加i的numBbpGroup - 1。
编辑:我觉得您的设备名称变量是一个空字符串,这就是导致您看到的索引错误的原因。
发布于 2019-10-09 18:50:46
你能试一下这个正向后的正则表达式吗?我假设您希望在字符串host-name之后进行测试。
reDeviceName = re.compile(r'(?<=host-name).*')https://stackoverflow.com/questions/58310268
复制相似问题