【问题标题】:How to sort CSV files by alphabet and highest number. Python 3如何按字母和最高数字对 CSV 文件进行排序。蟒蛇 3
【发布时间】:2016-03-05 18:28:26
【问题描述】:

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

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]

谢谢。

【问题讨论】:

  • 您可能应该在此处使用class_a 和初始fp 的上下文管理器。
  • 您正在使用x[6]。那恰好是average,而不是maximum...
  • @hlt 哦,对了!那我应该把它改成什么?
  • @hlt 我知道了,谢谢。

标签: python sorting csv python-3.x


【解决方案1】:

你在这里犯了一些错误:

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

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

minimum = min(row[1:3])

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

然后您需要修复计算平均值的代码:

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

这并不像你想象的那样!区别在于整数除法和实数除法。

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

【讨论】:

  • 感谢您的帮助,但我究竟应该将average 行更改为什么?另外,你还没有真正回答我的问题。
  • 抱歉,我没有意识到您确实回答了我的问题。谢谢,这对我有很大帮助
猜你喜欢
  • 2015-06-13
  • 1970-01-01
  • 2016-01-26
  • 2016-08-26
  • 2011-01-15
  • 2018-05-05
  • 2017-11-19
  • 2016-08-23
  • 1970-01-01
相关资源
最近更新 更多