Python 按数值对CSV文件排序

Python 按数值对CSV文件排序,python,csv,sorting,operator-keyword,Python,Csv,Sorting,Operator Keyword,所以对于家庭作业任务,我必须制作一个程序,像一个排行榜一样对分数进行排序,我不知道如何按降序排序 我将发送我的代码的其余部分,如果这有帮助,任何帮助将不胜感激 忘了提及CSV文件的外观如下: 姓名、分数 我在这里看到了很多关于这方面的问题,但似乎没有一个与我的问题相符 with open('names.csv', 'a', newline='') as names: csvWriter = csv.writer(names) csvWriter.writerow([name, i

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

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

忘了提及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读取到数据帧中

这里是分类的地方


有关将csv读入数据帧的信息,请参见此处

这里是分类的地方


这里的代码有一些问题,我将尝试将其分解。。我不建议你现在就跳到熊猫队。我假设这实际上是在写数据。。但是您应该检查“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时没有指定分隔符,因此它实际上会有一个标准分隔符,它是一个逗号“,”<默认情况下,code>csvReader将使用此选项,但
csv1
将尝试按时段分割,但效果不佳

with open('names.csv', 'r') as names:
    csvReader = csv.reader(names)
    csv1 = csv.reader(names, delimiter='.')
您不应该使用“sort”作为变量名。。这是一个常用方法的名称。但这实际上不会破坏这里的任何东西。。您创建了一个新的排序版本的
csv1
,但实际上是在
csvReader
上运行for循环,自从您在上面设置它以来,该循环一直没有改变。您还可以创建
csv\u writer
with
names
with,该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
既然你想让它看起来“像一个排行榜”,你可能会想要一个不同的排序。。您希望将其反转,并实际使用score列的整数值(例如,100将出现在2的上方)


这里的代码有一些问题,我将尝试将其分解。。我不建议你现在就跳到熊猫队。我假设这实际上是在写数据。。但是您应该检查“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时没有指定分隔符,因此它实际上会有一个标准分隔符,它是一个逗号“,”<默认情况下,code>csvReader将使用此选项,但
csv1
将尝试按时段分割,但效果不佳

with open('names.csv', 'r') as names:
    csvReader = csv.reader(names)
    csv1 = csv.reader(names, delimiter='.')
您不应该使用“sort”作为变量名。。这是一个常用方法的名称。但这实际上不会破坏这里的任何东西。。您创建了一个新的排序版本的
csv1
,但实际上是在
csvReader
上运行for循环,自从您在上面设置它以来,该循环一直没有改变。您还可以创建
csv\u writer
with
names
with,该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
既然你想让它看起来“像一个排行榜”,你可能会想要一个不同的排序。。您希望将其反转,并实际使用score列的整数值(例如,100将出现在2的上方)


使用熊猫图书馆。如果你做不到,那就意味着你必须学会如何做,而不是让别人帮你做,因为正如你所说,这是家庭作业。提示:阅读csv文件,制作一个以名称为键、分数为值的字典,并学习如何用python对字典进行排序。使用pandas库。如果你做不到,那就意味着你必须学会如何做,而不是让别人帮你做,因为正如你所说,这是家庭作业。提示:阅读csv文件,制作一个以名称为键、分数为值的字典,并学习如何用python对字典进行排序。