我需要对三名学生进行分类。从现有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
答案 0 :(得分:0)
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:
file1.sort(key=lambda x: int(x[1]))