Python CSV - 列表索引超出范围

mor*_*ris 5 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*    
Run Code Online (Sandbox Code Playgroud)

以下是代码的一部分.这是愚蠢的简单东西,但我只是空白它是如何工作的.我刚接触编码,但之前已经处理过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]
Run Code Online (Sandbox Code Playgroud)

Bur*_*lid 12

尝试检查空白行.另外,避免使用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]
Run Code Online (Sandbox Code Playgroud)

  • Python 3 中没有内置的 `file`。即使在 Python 2 中,`file` 也是一个例外,可以用作变量名(建议使用 `open()` 而不是 `file()`这是一个太好的名字,不容忽视)。 (2认同)

She*_*ena 6

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

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

for row in reader:
    print(repr(row))
    some = row[1]
Run Code Online (Sandbox Code Playgroud)

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

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

  1. 通过一些清理脚本传递文件以删除空白行
  2. 调用 reader 时更改识别的换行符


小智 6

这个问题很老了,但我遇到了一个稍微不同的解决方案来解决这个问题,所以我将它放在这里供其他可能遇到这个问题的人使用。我的文件太大了,我看不到它的结尾。最后有一行只有 2 个内容,而不是我的文件中典型的 5 个内容,因此当我尝试获取第四列时,它给了我这个错误。这是我的解决方案:

    for row in reader:
        if len(row) > 2:
            array.append(row[3])
Run Code Online (Sandbox Code Playgroud)