7

读取 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

4 回答 4

18

尝试检查空行。另外,避免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]
于 2012-10-24T09:59:41.567 回答
4

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

这样做,你会明白我的意思:

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

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

您可以采取一些措施来解决此问题:

  1. 通过一些清理脚本传递文件以删除空白行
  2. 调用 reader 时更改识别的换行符
于 2012-10-24T09:54:51.897 回答
4

这个问题很老了,但我遇到了一个稍微不同的解决方案,所以我会把它放在这里给可能有这个问题的其他人。我的文件太大了,我看不到它的结尾。最后有一排只有 2 个东西,而不是我文件中典型的 5 个,所以当我试图获取第四列时,它给了我这个错误。这是我的解决方案:

    for row in reader:
        if len(row) > 2:
            array.append(row[3])
于 2018-08-03T05:43:22.070 回答
0

我以前也遇到过这个错误。我的问题很愚蠢,但可以避免。我从另一个程序复制了一些代码并且没有更改分隔符(在我的情况下从管道到逗号),所以它当然超出了它的索引来寻找一个从未存在的管道。

于 2018-07-19T17:08:27.943 回答