我需要从现有的Excel文件中对三个学生的分数进行排序,找到最大值,然后在新Excel文件中从最高到最低的分数输出。
我了解如何从文件中读取并找到最大值。到目前为止,这是我的代码:
import csv
import operator
file_reader=open("scoreresults.csv","r")
csv_r=csv.reader(file_reader,delimiter=",")
file_writer =open( "score results output.csv","w", newline="")
csv_w=csv.writer(file_writer)
newdata=[]
for row in csv_r:
forename,deposit1,deposit2,deposit3=row
newdata.append(forename)
newdata.append(deposit1)
newdata.append(deposit2)
newdata.append(deposit3)
file=[forename,deposit1,deposit2,deposit3]
maximumn=max(file)
file1=[forename,maximumn]
file1.sort(key=operator.itemgetter(1))
csv_w.writerow([file1])
file_reader.close()
file_writer.close()
我没有添加尝试对其进行排序的位,因为我完全失败了。当我尝试使用itemgetter
时,我只能打印,不能保存到文件,并且从最低到最高。
它应该看起来的一个例子:
name score name score
James 2 should turn into sam 10
sam 10 jane 9
dan 5 dan 5
lee 4 lee 4
jane 9 james 2
import csv
from operator import itemgetter
with open("scoreresults.csv","r") as r, open( "score_results_output.csv","w", newline="") as f:
csv_w = csv.writer(f)
csv_r = csv.reader(r)
csv_w.writerows(sorted((((name, max(scores,key=int))
for name,*scores in csv_r)), key=itemgetter(1), reverse=True))
首先用csv_w.writerow(next(csv_r))
编写标头,然后对使用max(scores,key=int))
的每个用户的分数进行排序,然后通过键key=itemgetter(1)
通过第二个元素对元素进行排序,这是每种用法的最大分数,都可以从reverse=True
分类。最高到最低。
输入:
name,score
sam,10,12,13
dan,5,23,2
lee,4,23,5
jane,9,2,10
输出:
name,score
dan,23
lee,23
sam,13
jane,10
基于forename,deposit1,deposit2,deposit3=row
,我假设您有一个名称和三个分数
您的生活比在您自己的代码中需要更艰难,您的出现永远无法使用的是您要比较字符串而不是Int,您需要施放INT:
file1.sort(key=lambda x: int(x[1]))