从csv fi读取时索引超出范围

2024-10-01 04:44:56 发布

您现在位置:Python中文网/ 问答频道 /正文

此代码从文本文件中读取数据,然后继续按每行中包含的数字(从低到高)对程序创建的列表进行排序,然后程序应将输入的名称与列表中的名称进行匹配,然后继续计算该位置

代码如下:

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是一个TkinterStringvarName也是一个TkinterStringVar


Tags: thetonameinforindexifposition
1条回答
网友
1楼 · 发布于 2024-10-01 04:44:56

csv文件中似乎有行只有一个或更少的项。您可以通过下面所示的简单更改来避免将它们添加到RankList。另请注意,您应该使用python3中的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()
  ...

相关问题 更多 >