【问题标题】:Sort CSV File by Numerical Values按数值排序 CSV 文件
【发布时间】:2019-10-28 00:32:30
【问题描述】:

所以对于家庭作业任务,我必须制作一个程序,像排行榜一样对分数进行排序,但我不知道如何按降序对其进行排序。

如果有帮助,我将发送我的其余代码,任何帮助将不胜感激。

忘记提及 CSV 文件如下所示: 姓名,分数

我在这里看到了很多关于此的问题,但似乎没有一个适用于我的问题。

with open('names.csv', 'a', newline='') as names:
    csvWriter = csv.writer(names)
    csvWriter.writerow([name, int(score)])

with open('names.csv', 'r') as names:
    csvReader = csv.reader(names)
    csv1 = csv.reader(names, delimiter='.')
    sort = sorted(csv1, key=operator.itemgetter(0))
    csv_writer = csv.writer(names, delimiter='.')
    for name in csvReader:
        print(' '.join(name))

没有错误信息或结果,只是一个退出代码

【问题讨论】:

  • 使用熊猫库。如果你做不到,那意味着你必须学习如何去做,而不是让别人为你做,因为正如你所说,这是家庭作业。提示:读取csv文件,制作以名称为键,分数为值的字典,学习如何在python中对字典进行排序。

标签: python csv sorting operator-keyword


【解决方案1】:
【解决方案2】:

这里的代码存在一些问题,我会尝试将其分解。我不建议您立即跳转到 pandas。我将假设这实际上是在写入数据.. 但您应该检查“names.csv”以确保它不为空。看起来这只会写一行。我也不确定你为什么设置newline='',我可能不会在这里这样做.. 虽然我不确定这对csv.writer 是否重要。

with open('names.csv', 'a', newline='') as names:
    csvWriter = csv.writer(names)
    csvWriter.writerow([name, int(score)])

通常你会在这样的语句中有一个循环:

my_list = [("Bob", "2"), ("Alice", "1")]

with open('names.csv', 'a') as names:
    csvWriter = csv.writer(names)
    for name, score in my_list:
        csvWriter.writerow([name, int(score)])

你在这里做了两个 csv 阅读器。我不知道为什么。第二个使用“。”因为它是分隔符..您在编写 csv 时没有指定分隔符,因此它实际上将具有标准分隔符,带有逗号“,”。 csvReader 会默认使用这个,但csv1 会尝试在句点上拆分,但效果不佳。

with open('names.csv', 'r') as names:
    csvReader = csv.reader(names)
    csv1 = csv.reader(names, delimiter='.')

你不应该使用“sort”作为变量名。它是一个常用方法的名称。但这实际上不会破坏这里的任何东西..您创建了csv1 的新排序版本,但实际上您在csvReader 上运行了for 循环,自从您在上面设置它以来没有改变。您还可以使用 names 创建 csv_writer 并打开以供读取,而不是写入。但无论如何你都不使用它。 itemgetter 正在查看索引 0,这将是您作者的名字。如果您想按分数排序,请使用 1

    sort = sorted(csv1, key=operator.itemgetter(0))
    csv_writer = csv.writer(names, delimiter='.')
    for name in csvReader:
        print(' '.join(name))

我认为这可能是你想要的更多......使用我的示例列表。

#!/usr/bin/env python3
import csv
import operator

my_list = [("Bob", "2"), ("Alice", "1")]

with open('names.csv', 'a') as names:
    csvWriter = csv.writer(names)
    for name, score in my_list:
        csvWriter.writerow([name, int(score)])

with open('names.csv', 'r') as names:
    csvReader = csv.reader(names)
    sorted_reader = sorted(csvReader, key=operator.itemgetter(1))
    for name, score in sorted_reader:
         print(name, score)

输出:

Alice 1
Bob 2

由于您希望它看起来“像排行榜”,但您可能需要不同的排序方式.. 您想要反转它并实际使用分数列的整数值(例如,100 会出现在 2 之上) .

    sorted_reader = sorted(csvReader, key=lambda row: int(row[1]), reverse=True)

【讨论】:

    猜你喜欢
    • 2015-06-02
    • 2021-09-04
    • 2018-07-03
    • 1970-01-01
    • 2015-05-22
    • 2015-12-24
    • 1970-01-01
    • 2013-06-29
    • 2021-03-08
    相关资源
    最近更新 更多