因此,对于一项家庭作业,我必须编写一个程序以类似于排行榜的方式对分数进行排序,而且我不知道如何按降序对其进行排序。
如果有帮助,我将发送其余代码,我们将不胜感激。
忘记提及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))
没有错误消息或结果,只是退出代码
答案 0 :(得分:0)
有关将csv读入数据帧的信息,请参见此处
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html
在这里进行排序
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sort_values.html
答案 1 :(得分:0)
这里的代码存在一些问题,我将尝试将其分解..我不建议您立即跳到熊猫。我将假定这实际上是在写数据..但是您应该检查“ 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循环,自从您在上面进行设置以来,该循环没有改变。您还创建了csv_writer
的{{1}},其中names
处于打开状态,可供读取,而非书写。但您还是不要使用它。
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)