&引用;列表索引超出范围“;使用python对csv文件中的数据进行排序时出错

&引用;列表索引超出范围“;使用python对csv文件中的数据进行排序时出错,python,sorting,csv,Python,Sorting,Csv,我有三个.csv文件,我希望python对其中的数据进行排序。我有这段代码,但当我启动它时会发生错误。此行sort=sorted(csv1,key=operator.itemgetter(1))中出现错误。结尾的数字应该选择列,但它不选择。我在mac上有这个程序,它可以工作,但当我在windows上启动它时,它就停止工作了 导入操作符 导入csv 决策=输入(“您希望如何查看信息?键入分数或姓氏”) decision1=输入(“您希望看到什么样的计算?键入class1、class2或class

我有三个.csv文件,我希望python对其中的数据进行排序。我有这段代码,但当我启动它时会发生错误。此行sort=sorted(csv1,key=operator.itemgetter(1))中出现错误。结尾的数字应该选择列,但它不选择。我在mac上有这个程序,它可以工作,但当我在windows上启动它时,它就停止工作了

导入操作符
导入csv
决策=输入(“您希望如何查看信息?键入分数或姓氏”)
decision1=输入(“您希望看到什么样的计算?键入class1、class2或class3。”)
如果(决策='score'和决策1='class1'):
示例=打开('class1.csv','r')
csv1=csv.reader(示例,分隔符=',')
sort=sorted(csv1,key=operator.itemgetter(0))
对于排序中的每条线:
打印(每行)
如果(decision=='name'和decision1=='class1'):
示例=打开('class1.csv','r')
csv1=csv.reader(示例,分隔符=',')
sort=sorted(csv1,key=operator.itemgetter(1))
对于排序中的每条线:
打印(每行)
如果(决策='score'和决策1=='class2'):
示例=打开('class2.csv','r')
csv1=csv.reader(示例,分隔符=',')
sort=sorted(csv1,key=operator.itemgetter(0))
对于排序中的每条线:
打印(每行)
如果(decision=='name'和decision1=='class2'):
示例=打开('class2.csv','r')
csv1=csv.reader(示例,分隔符=',')
sort=sorted(csv1,key=operator.itemgetter(1))
对于排序中的每条线:
打印(每行)
如果(决策='score'和决策1=='class3'):
示例=打开('class3.csv','r')
csv1=csv.reader(示例,分隔符=',')
sort=sorted(csv1,key=operator.itemgetter(0))
对于排序中的每条线:
打印(每行)
如果(decision=='name'和decision1=='class3'):
示例=打开('class3.csv','r')
csv1=csv.reader(示例,分隔符=',')
sort=sorted(csv1,key=operator.itemgetter(1))
对于排序中的每条线:
打印(eachline)
类似的内容

import operator
import csv

sorter = raw_input("Set sort method (score or surname): ")
classNumber = raw_input("Set class number (1, 2 or 3): ")

def print_sorted(sortMethod, classNumber):
    classFile = 'class' + str(classNumber) + '.csv'
    with open(classFile, 'r') as fh:
        csvData = csv.DictReader(fh)
        sortedCsvData = sorted(csvData, key=operator.itemgetter(sortMethod))
        for line in sortedCsvData:
            print line

print_sorted(sorter, classNumber)
不过,在运行该函数之前,您可能希望添加用户对输入集的某种验证

如果列缺少值,则不会出错


编辑为:如果您使用的是python 3,则需要将上面的原始输入()更改为输入()

听起来至少有一行缺少第1列的值
csv.reader(示例)
返回一个列表生成器,其中每个列表对应一行,每个列表的长度对应于给定行中逗号分隔的值的数量。因此,包含如下数据的文件:

   John,Smith
   Joe
   Jane,Doe
当被csv.reader解析时,会给你
([“约翰”、“史密斯”]、[“乔”]、[“简”、“多伊”])


操作符.itemgetter
尝试从一个不存在的列表(行)访问索引(列)时,
sorted
函数将中断。如果您在上面的示例中对第1列进行排序,您的代码将中断,因为列表中只有一个元素
[“Joe”]

,它仍然会给我一个错误回溯(最近的调用最后一次):文件“H:/Computing/sorting.py”,第2行,在导入csv文件“H:/Computing\csv.py”中,第13行,在in_txt=csv.reader中(打开(txt_newfile,“rb”),分隔符='\t')AttributeError:'module'对象没有属性'reader'您使用了上面的代码吗?我没有使用csv.reader,它使用的是csv.DictReader,因此该错误没有意义。如果在原始示例中使用逗号,为什么要指定delimeter='\t'?我认为这与您正在运行的代码不同。抱歉,还修复了语法错误,是吗o再抄写一次。能试试这个吗?