从Excel从最高到最低排序列表

时间:2015-05-19 20:54:01

标签: python excel sorting

我需要对三名学生进行分类。从现有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

1 个答案:

答案 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]))