簡體   English   中英

Python CSV - 列表索引超出范圍

[英]Python CSV - list index out of range

讀取 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]

嘗試檢查空行。 另外,避免使用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]

這個問題很老,但我遇到了一個稍微不同的解決這個問題的方法,所以我會把它放在這里給可能有這個問題的其他人。 我的文件太大了,我看不到它的結尾。 最后有一排只有 2 個東西,而不是我文件中典型的 5 個,所以當我試圖獲取第四列時,它給了我這個錯誤。 這是我的解決方案:

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

看起來你有一個空行什么的。 默認情況下,for 循環的每次迭代都會從 csv 文件中獲取一行文本。 該行文本以換行符結尾。 所以如果你有一個空行,那么讀者會像這樣閱讀它[]。

這樣做你就會明白我的意思:

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

您會發現打印的最后一行的長度不是 2 或更多。

您可以采取一些措施來解決此問題:

  1. 通過一些清理腳本傳遞文件以刪除空行
  2. 調用 reader 時更改識別的換行符

我以前也遇到過這個錯誤。 不過,我的問題很愚蠢,而且是可以避免的。 我從另一個程序復制了一些代碼並且沒有改變分隔符(在我的例子中從管道到逗號),所以當然它超出了它的索引尋找管道,當管道從未存在時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM