索引超出范围错误(从读取文件的数组)

时间:2015-02-28 00:33:20

标签: python list

我试图计算列表中存在多少个特定字符串(在这种情况下' v')。 但是当我运行代码时,它会给我索引超出范围的错误。 该列表由line.split()方法

创建

所以这就是我所拥有的:

for line in open('cube.obj','r').readlines():
    rawdata = line.split()[0:]
    data = line.split()[1:]
    obj.add_last(data)
    if rawdata[0] == 'v':
        v_count += 1

cube.obj文件如下:

# cube
v 0.0 0.0 0.0
v 1.0 0.0 0.0
v 1.0 0.0 1.0
v 0.0 0.0 1.0
v 0.0 1.0 1.0
v 0.0 1.0 0.0
v 1.0 1.0 0.0
v 1.0 1.0 1.0

f 1 2 3 4
f 6 7 8 5
f 2 3 8 7
f 1 4 5 6
f 3 4 5 8
f 1 2 7 6

感谢任何帮助 谢谢!

2 个答案:

答案 0 :(得分:1)

如果您的索引超出范围错误,那是因为您正在引用不存在的列表条目。

在您的情况下,看起来可能是rawdata[0] == 'v'

如果rawdata是一个空列表,这将导致错误。如果你的行是一个空字符串,就会发生这种情况。

line = ''
rawdata=line.split()[0:]
rawdata
> []
rawdata[0]
> ---------------------------------------------------------------------------
> IndexError                                Traceback (most recent call last)
> <ipython-input-4-c81248904650> in <module>()
> ----> 1 rawdata[0]
> IndexError: list index out of range

要跳过此操作,请测试该行是否为空,如果是continue,则为下一行。

for line in ['', '', 'a', 'b']:
   if not line:
       continue
   rawdata = line.split()[0:]
   print rawdata[0]

> a
> b

答案 1 :(得分:1)

您可以sum使用生成器表达式使用if line.strip()删除空行,以便我们不会将IndexError索引为空列表:

def  counts(f,ch):
    with open(f) as in_file:
        return sum(line.split()[0] == ch for line in in_file if line.strip())
print(counts("words.txt","v"))
8

if line.strip()只有在该行不为空时才为True。