如何使用变量对csv文件进行排序

时间:2015-12-23 15:35:01

标签: python csv

我试图按每个学生的最高分(他们得到的三个分数)对csv文件进行排序。这是我的代码。

def score_high(filename):

    people = []
    list11 =[]
    count = 0

    with open(filename) as Class:
        reader = c.reader(Class,delimiter=",")
        for row in reader:
            people = []
            people.append(row[0])

            if int(row[1]) > int(row[2]) and int(row[1]) > int(row[3]):
                score = row[1]

            elif int(row[2]) > int(row[3]):
                score = row[2]
            elif int(row[3]) > int(row[2]):
                score = row[3]
            people.append(score)

            count = count+1
            list11.insert(count,people)

    sort=sorted(list11, key = o.itemgetter('''a sort for the score'''), reverse = False)
    for eachline in sort:
        print( eachline)

csv文件:

kieran,3,10,7
ben,4,8,5
ethan,9,1,4
oliver,7,2,3

2 个答案:

答案 0 :(得分:2)

这里有几个问题。首先,使用'''a sort for the score'''作为itemgetter的索引是完全错误的。您应该传递itemgetter您希望获得的列表(或元组)项的索引 - 在这种情况下,该值为1

其次,由于sort函数正在尝试对字符串值进行排序,因此您没有找到正确的顺序,如果您尝试比较'10' > '9',您会看到输出实际上是False。在附加分数之前,您需要将分数转换为整数。

最后一点 - 我不会import csv as cimport operator as o。您应该能够键入三到八个字母,这会使代码更难以阅读。请记住,代码的读取频率远远高于编写代码。

import csv
import operator

def score_high(filename):

    people = []
    list11 =[]
    count = 0

    with open(filename) as Class:
        reader = csv.reader(Class,delimiter=",")
        for row in reader:
            people = []
            people.append(row[0])

            if int(row[1]) > int(row[2]) and int(row[1]) > int(row[3]):
                score = row[1]

            elif int(row[2]) > int(row[3]):
                score = row[2]
            elif int(row[3]) > int(row[2]):
                score = row[3]
            people.append(int(score))

            count = count+1
            list11.append(people) # use append here, you're going to sort it anyways

    sort = sorted(list11, key=operator.itemgetter(1), reverse=True)
    for s in sort:
        print(s)
    return sort

您也永远不会检查学生列表中得分最高的情况,但我会留下您自己做的事情。

答案 1 :(得分:0)

import csv
import operator

marks = operator.itemgetter(1,2,3)
with open('path/to/file') as infile:
    data = list(csv.reader(infile))
data.sort(key=lambda row: max(int(i) for i in marks(row)))

for row in data: print(row)