繁体   English   中英

如何使用python对CSV文件进行排序

[英]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 部分完成:

  1. 读取所有数据(假设它有一个标题行)。 一个csv_reader()用于解析您的文件并将每一行作为值列表读取。 通过调用list()它将读取所有行作为行列表。
  2. 对数据进行排序
  3. 写入所有数据(首先添加回标题),这次使用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

请注意, dinowilma都具有相同的分数,但dino是按字母顺序排列的。

这假设您使用的是 Python 3.x

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM