这里的代码存在一些问题,我会尝试将其分解。我不建议您立即跳转到 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)