如何按字母和最高编号对CSV文件进行排序。 Python 3

时间:2015-12-01 18:05:02

标签: python sorting csv python-3.x

这是我的代码(对不起,我知道它很乱):

import csv
with open('test.csv', 'w', newline='') as fp:
    a = csv.writer(fp, delimiter=',')
    data = [['Bob', '4', '6', '3'],
            ['Dave', '7', '9', '10'],
            ['Barry', '5', '2', '3']]
    a.writerows(data)
print("1 for for alphabetical orderwith each students highest score\n2 for highest score, highest to lowest\n3 for average score, highest to lowest")
cho_two=int(input())
class_a = open("test.csv")
csv_a = csv.reader(class_a)
a_list = []
for row in csv_a:
    row[1] = int(row[1])
    row[2] = int(row[2])
    row[3] = int(row[3])
    minimum = min(row[1:3])
    row.append(minimum)
    maximum = max(row[1:3])
    row.append(maximum)
    average = sum(row[1:3])//3
    row.append(average)
    a_list.append(row[0:9])
if cho_two == 1:
    alphabetical = [[x[0],x[6]] for x in a_list]
    print("\nCLASS A\nEach students highest by alphabetical order \n")
    for alpha_order in sorted(alphabetical):
        print(alpha_order)
        class_a.close()

以下是应该输出的内容:

['Barry', 5]
['Bob', 6]
['Dave', 10]

我希望它输出该人按字母顺序排列的最高分。

它实际输出了这个:

['Barry', 2]
['Bob', 3]
['Dave', 5]

感谢。

1 个答案:

答案 0 :(得分:1)

你在这里犯了一些错误:

首先,您将平均值存储在5位置,然后检查6位置的列表。

其次,您实际上并未正确地对行中的值进行切片。

minimum = min(row[1:3])

这只获得前2个元素,你需要获得所有元素。我建议从1开始阅读row[1:]

然后你需要修改计算平均值的代码:

average = sum(row[1:3])//3

这不符合你的想法!区别在于整数除法和实际除法。

然后当你追加行时,你可能应该用a_list.append(row)附加所有行。如果您需要一份副本,请将其全部切片。