Python CSV - 列表索引超出范围

时间:2012-10-23 21:17:29

标签: python csv python-3.x

我在读取CSV文件时遇到此错误(无标题,3列,第2和第3个字符串):

Traceback (most recent call last):
File "C:\Python32\fantasy.py", line 72, in module>
some=row[1]
IndexError: list index out of range*    

以下是代码的一部分。这是愚蠢的简单的东西,但我只是空白它是如何工作的。我刚接触编码,但之前已经处理过csv模块,并且从未遇到过这个部分的问题,只是在记事本中做了一些测试csv文件,看它是否会从相同的代码中读取,而且确实如此。我不知道。

import csv
##############some other code, working good and I believe not relevant to this problem
file=open(r"C:\Users\me\Desktop\file-2.csv","r")
reader=csv.reader(file, delimiter=',', quotechar='"')

for row in reader:
    some=row[1]

4 个答案:

答案 0 :(得分:8)

尝试检查空白行。另外,请避免使用file作为变量名。 "r"是打开的默认模式。

import csv

with open(r"C:\Users\me\Desktop\file-2.csv") as f:
     reader = csv.reader(f, delimiter=',', quotechar='"')
     for row in reader:
        if row:
            some=row[1]

答案 1 :(得分:3)

这个问题很旧,但是我遇到了一个稍微不同的解决方案,因此我将它放在这里给所有可能遇到此问题的人。我的文件太大了,看不到文件的结尾。最后,一行仅包含2项内容,而不是文件中通常的5项,因此当我尝试获取第四列时,它给了我这个错误。这是我的解决方案:

    for row in reader:
        if len(row) > 2:
            array.append(row[3])

答案 2 :(得分:2)

看起来你有一个空行或什么的。默认情况下,for循环的每次迭代都会从csv文件中获取一行文本。该行文本以换行符结尾。因此,如果您有一个空白行,那么读者会将其读作类似[]的内容。

这样做,你会看到我的意思:

for row in reader:
    print(repr(row))
    some = row[1]

您会发现打印的最后一行不是2或更长。

你可以采取一些措施来解决这个问题:

  1. 通过一些清理脚本传递文件以删除空行
  2. 在您致电阅读器时更改已识别的换行符

答案 3 :(得分:0)

我之前也有此错误。我的问题很愚蠢,可以避免。我从另一个程序复制了一些代码,但没有更改定界符(在我的情况下是从管道更改为逗号),因此,当一个管道根本不存在时,查找一个管道当然超出了索引范围。