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

时间:2018-11-02 16:08:38

标签: python arrays csv

我正在尝试为python程序制作排行榜 我已经整理好将不同的分数写到排行榜了 但是,我在寻找一种可以对这些数据进行排序的方式时遇到了麻烦 (最高得分在最底端,最低得分在底端)

对不起,但是我没有任何代码,甚至功能模糊,我尝试过的一切都不正确

我对学校项目的访问权限也很有限,这对我来说更困难(我有CSV,Random,Time等)

非常感谢你 我真的很感谢我能收到的任何帮助

2 个答案:

答案 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部分:

  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