Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 拆分字符串时索引超出范围_Python_String_List_Indexing_Split - Fatal编程技术网

Python 拆分字符串时索引超出范围

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

我正在尝试一个看似简单的操作——使用简单的字符串函数(如“split”)解析Cisco路由器的输出。然而,我不断得到一个错误,索引超出范围,我不知道为什么

以下是我从简单的“show ip int-brief”输出开始的内容:

下面是我试图针对它运行的代码:

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—它在最后两行上被捕获,因为它们没有预期的字段数。谢谢大家的帮助,谢谢!是的,就是这样——最后两行没有预期的字段数,所以我的代码挂起了。谢谢!是的,就是这样——最后两行没有预期的字段数,所以我的代码挂起了。