簡體   English   中英

從CSV文件讀取時索引超出范圍

[英]Index out of range when reading from a csv file

此代碼從文本文件中讀取數據,然后繼續按每行中包含的編號(從最低到最高)對程序創建的列表進行排序,然后程序應將輸入的名稱與列表中的名稱相匹配,然后繼續進行操作計算那個人的位置。

這是代碼:

def Rank():
  #Declare List
  RankList=[]
  #Opening and reading the file
  with open('GolfInfo.txt','rU') as csvfile:
        reader=csv.reader(csvfile)
        for row in reader:
              #Data added to list
              RankList.append(row)
  #List is sorted by amount of strokes taken (Total) from lowest to highest
  RankList.sort()
  index=0
  Position=0
  RankMessageFull=("")
  for row in RankList:
        #Checks to see if Name is present in the list
        if row[1] == Name.get():
            Position=index+1
            #These if-elif-else statements determine a suitable suffix for the rank
            if Position==1:
                  RankMessageFull=(Position,"st")
                  RankMessage.set(RankMessageFull)
            elif Position==2:
                  RankMessageFull=(Position,"nd")
                  RankMessage.set(RankMessageFull)
            elif Position==3:
                  RankMessageFull=(Position,"rd")
                  RankMessage.set(RankMessageFull)
            else:
                  RankMessageFull=(Position,"th")
                  RankMessage.set(RankMessageFull)

        else:
              index=index+1

文本文件顯示為:

63,April,"('-', 7)"
69,Betsy,"('-', 1)"
80,Laura,"('+', 10)"
93,Coco,"('+', 23)"

該行中發生錯誤:

if row[1] == Name.get():

但是我不知道為什么。 完整的錯誤消息可以在這里看到:

if row[1] == Name.get():
  IndexError: list index out of range

RankMessage是Tkinter StringvarName也是Tkinter StringVar

在csv文件中似乎有些行僅包含一個或更少的項目。 您可以通過以下所示的簡單更改避免將它們添加到RankList中。 另請注意,您應該在Python 3中使用newline=''選項open() csv文件。

def Rank():
  #Declare List
  RankList=[]
  #Opening and reading the file
  with open('GolfInfo.txt','rU', newline='') as csvfile:
        reader=csv.reader(csvfile)
        for row in reader:
              #Data added to list if not blank.
              if row:  # ADDED TEST!
                    RankList.append(row)
  #List is sorted by amount of strokes taken (Total) from lowest to highest
  RankList.sort()
  ...

暫無
暫無

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

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