[英]How to sort a CSV file using python
我正在尝试为我的 python 程序制作一个排行榜我已经整理出将不同的分数写入排行榜但是,我无法找到一种可以对这些数据进行排序的方法(最高分在顶部,最低分在底部)
另外,我很抱歉,但我没有任何功能模糊的代码,我尝试过的一切都是不正确的
此外,我对模块的访问权限有限,因为它是一个学校项目,这对我来说更加困难(我有 CSV、随机、时间,)
非常感谢我真的很感激我能得到的任何帮助
您可以使用 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)
这个问题可以使用标准 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.