我正在尝试在bgp_summary字符串中的每一行中获取第一项,并创建一个新的列表。我为此目的使用下面的代码,但得到“列表索引超出范围”错误。我相信我所指的列表索引并没有超出范围,但不确定为什么会出现这种错误。 如果有人可以提供帮助,我将不胜感激。
bgp_summary = """
10.0.13.213 65510 658 86 0 0 2d 3:43:06 Establ
172.46.42.134 65513 819 7 0 11 2d 3:50:49 Establ
172.57.13.1 65501 15427 52 0 0 0d 2:26:01 Establ
172.57.13.249 65513 13449 2517 0 0 2d 3:50:21 Establ
172.57.13.250 65513 134 2515 0 0 4d 3:50:21 Establ
172.57.13.252 65513 46 142 0 0 3:50:32 Establ
"""
bgp_peers_list_raw = []
bgp_peers_list_refined = []
bgp_peers_list_raw = bgp_summary.splitlines()
n=0
for n in range (len(bgp_peers_list_raw)):
list_raw1 = []
list_raw1 = bgp_peers_list_raw[n].split()
bgp_peers_list_refined.append(list_raw1[0])
bgp_peers_list_refined.append(list_raw1[0])
IndexError: list index out of range
答案 0 :(得分:2)
你的一些行是空的。如果你放弃那些:
bgp_peers_list_raw = [l.strip() for l in bgp_summary.splitlines()
if l.strip()]
它会正常工作。
bgp_summary = """
10.0.13.213 65510 658 86 0 0 2d 3:43:06 Establ
172.46.42.134 65513 819 7 0 11 2d 3:50:49 Establ
172.57.13.1 65501 15427 52 0 0 0d 2:26:01 Establ
172.57.13.249 65513 13449 2517 0 0 2d 3:50:21 Establ
172.57.13.250 65513 134 2515 0 0 4d 3:50:21 Establ
172.57.13.252 65513 46 142 0 0 3:50:32 Establ
"""
bgp_peers_list_raw = []
bgp_peers_list_refined = []
bgp_peers_list_raw = [l.strip() for l in bgp_summary.splitlines()
if l.strip()]
n = 0
for n in range(len(bgp_peers_list_raw)):
list_raw1 = []
list_raw1 = bgp_peers_list_raw[n].split()
bgp_peers_list_refined.append(list_raw1[0])
bgp_peers_list_refined.append(list_raw1[0])
print(bgp_peers_list_refined)
['10.0.13.213', '172.46.42.134', '172.57.13.1', '172.57.13.249',
'172.57.13.250', '172.57.13.252', '172.57.13.252']
答案 1 :(得分:0)
这是因为bgp_summary
有一些空行。
最简单,最直接的解决方案是将您的bgp_summary
转换为:
bgp_summary = """
10.0.13.213 65510 658 86 0 0 2d 3:43:06 Establ
172.46.42.134 65513 819 7 0 11 2d 3:50:49 Establ
172.57.13.1 65501 15427 52 0 0 0d 2:26:01 Establ
172.57.13.249 65513 13449 2517 0 0 2d 3:50:21 Establ
172.57.13.250 65513 134 2515 0 0 4d 3:50:21 Establ
172.57.13.252 65513 46 142 0 0 3:50:32 Establ
"""
为:
bgp_summary = """10.0.13.213 65510 658 86 0 0 2d 3:43:06 Establ
172.46.42.134 65513 819 7 0 11 2d 3:50:49 Establ
172.57.13.1 65501 15427 52 0 0 0d 2:26:01 Establ
172.57.13.249 65513 13449 2517 0 0 2d 3:50:21 Establ
172.57.13.250 65513 134 2515 0 0 4d 3:50:21 Establ
172.57.13.252 65513 46 142 0 0 3:50:32 Establ"""
虽然看起来并不好看但能解决你的问题。
使bgp_summary
保持不变的更复杂的解决方案只是对你的for循环的一个小修改。
而不是像这样检查每一行:
range(len(bgp_peers_list_raw))
您可以在开头和结尾排除空的,如下所示:
#2 empty lines at the start
#1 empty line at the end
range(2, len(bgp_peers_list_raw)-1)