我正在尝试为python程序制作排行榜 我已经整理好将不同的分数写到排行榜了 但是,我在寻找一种可以对这些数据进行排序的方式时遇到了麻烦 (最高得分在最底端,最低得分在底端)
对不起,但是我没有任何代码,甚至功能模糊,我尝试过的一切都不正确
我对学校项目的访问权限也很有限,这对我来说更困难(我有CSV,Random,Time等)
非常感谢你 我真的很感谢我能收到的任何帮助
答案 0 :(得分:0)
您可以使用pandas读取文件,按列对其进行排序,然后用新值覆盖旧的csv。该代码将类似于以下内容:
import pandas as pd
path = your_file_path
df = pd.read_csv(path)
df = df.sort_values(by=["column_name"], ascending=False)
df.to_csv(path)
答案 1 :(得分:0)
可以使用标准Python将问题分为3部分:
csv_reader()
用于解析文件,并在每一行中作为值列表读取。通过调用list()
,它将读取所有行作为行列表。csv.writer()
自动获取行列表并将正确的格式写入文件。这可以使用您说可以使用的Python csv
库来完成。其次,您需要告诉sort()
函数如何对行进行排序。在此示例中,假设得分在第二列中。 csv
库将读取每一行作为值列表(从0开始),因此此示例中的分数为第1列。key
参数为sort()
提供了一个用于调用的函数它正在排序的每一行。该函数接收一行并返回要对行的哪些部分进行排序,因此您不必在第一列上进行排序。 lambda
只是编写单行函数的简写,它接受参数x
并返回行中要排序的元素。在这里,我们使用Python元组返回两个元素,即得分和名称。首先将得分字符串x[1]
转换为整数。添加-
将使得分最高的排名靠前。 x[0]
然后使用Name
列对两个分数相同的情况进行排序:
import csv
with open('scores.csv', newline='') as f_input:
csv_input = csv.reader(f_input)
header = next(csv_input)
data = list(csv_input)
data.sort(key=lambda x: (-int(x[1]), x[0]))
with open('scores_sorted.csv', 'w', newline='') as f_output:
csv_output = csv.writer(f_output)
csv_output.writerow(header)
csv_output.writerows(data)
因此,对于包含以下内容的示例CSV文件:
name,score
fred,5
wilma,10
barney,8
betty,4
dino,10
您将获得排序后的输出CSV,如下所示:
name,score
dino,10
wilma,10
barney,8
fred,5
betty,4
请注意,dino
和wilma
的得分都相同,但是dino
的字母顺序是第一个。
这假设您使用的是Python 3.x