Python 拆分字符串时索引超出范围
我正在尝试一个看似简单的操作——使用简单的字符串函数(如“split”)解析Cisco路由器的输出。然而,我不断得到一个错误,索引超出范围,我不知道为什么 以下是我从简单的“show ip int-brief”输出开始的内容: 下面是我试图针对它运行的代码:Python 拆分字符串时索引超出范围,python,string,list,indexing,split,Python,String,List,Indexing,Split,我正在尝试一个看似简单的操作——使用简单的字符串函数(如“split”)解析Cisco路由器的输出。然而,我不断得到一个错误,索引超出范围,我不知道为什么 以下是我从简单的“show ip int-brief”输出开始的内容: 下面是我试图针对它运行的代码: links = [] lines = output.split('\n') for item in lines: fields = item.split() interface = fields[0] ipaddre
links = []
lines = output.split('\n')
for item in lines:
fields = item.split()
interface = fields[0]
ipaddress = fields[1]
linkstate = fields[4]
prtcstate = fields[5]
links.append([interface,ipaddress,linkstate,prtcstate])
print links
下面是我得到的错误:
Traceback (most recent call last):
File "C:\Users\dtruman\Documents\PROJECTS\DEVOPS - ITOC CoE\NETWORK AUTOMATION\parse_output.py", line 32, in <module>
ipaddress = fields[1]
回溯(最近一次呼叫最后一次):
文件“C:\Users\dtruman\Documents\PROJECTS\DEVOPS-ITOC CoE\NETWORK AUTOMATION\parse_output.py”,第32行,在
IP地址=字段[1]
索引器错误:列出索引超出范围您基本上拥有它,但您需要添加一个健全性检查,以确保您获得的数据符合预期。我会这样做:
links = []
lines = output.split('\n')
for item in lines:
fields = item.split()
# make sure data is the proper length so you don't go out of bounds
if len(fields) != 6:
continue
interface = fields[0]
ipaddress = fields[1]
linkstate = fields[4]
prtcstate = fields[5]
links.append([interface,ipaddress,linkstate,prtcstate])
print links
还有其他方法可以做到这一点,但这是我能想到的第一种方法。这可以确保在填充任何数据之前,表中的所有6列都已填充该行。基本上已经填充了该行,但需要添加一个健全性检查,以确保获得的数据符合预期。我会这样做:
links = []
lines = output.split('\n')
for item in lines:
fields = item.split()
# make sure data is the proper length so you don't go out of bounds
if len(fields) != 6:
continue
interface = fields[0]
ipaddress = fields[1]
linkstate = fields[4]
prtcstate = fields[5]
links.append([interface,ipaddress,linkstate,prtcstate])
print links
还有其他方法可以做到这一点,但这是我能想到的第一种方法。这可确保在填写任何数据之前,表格中该行的所有6列都已填充。它看起来像是
输出的最后一行,“sdf-a-wan-rt-02#exit”,没有像您期望的那样包含六个空格分隔的单词。您是否查看了字段
以查看它是否包含您所想的内容?我想您已经了解了一些内容,用户5459381。也许我应该考虑按字段长度解析此类输出,而不是尝试按字符拆分?我不知道输入的确切性质,但字段的长度看起来并不一致,因此按字符拆分可能是最简单的方法。您可以考虑忽略最后一行(或者在某种程度上以不同的方式处理它),或者您可以忽略LeN< 6的行,即USER 545 938—它在最后两行上被捕获,因为它们没有预期的字段数。谢谢asist。它看起来像是输出的最后一行,“sdf-a-wan-rt-02#exit”并不像您所期望的那样包含六个空格分隔的单词。您是否查看了字段
,看看它是否包含了您所想的内容?我想您已经明白了,用户5459381。也许我应该考虑按字段长度解析此类输出,而不是尝试按字符拆分?我不知道输入的确切性质,但字段的长度看起来并不一致,因此按字符拆分可能是最简单的方法。您可以考虑忽略最后一行(或者在某种程度上以不同的方式处理它),或者您可以忽略LeN< 6的行,即USER 545 938—它在最后两行上被捕获,因为它们没有预期的字段数。谢谢大家的帮助,谢谢!是的,就是这样——最后两行没有预期的字段数,所以我的代码挂起了。谢谢!是的,就是这样——最后两行没有预期的字段数,所以我的代码挂起了。