【问题标题】:How to sort a CSV file alphabetically?如何按字母顺序对 CSV 文件进行排序?
【发布时间】:2016-02-25 13:22:01
【问题描述】:

这是我将数据添加到名为 studentScores.csv 的 CSV 文件的代码

myfile = open("studentScores.csv", "a+")

newRecord = Score, Name, Gender, FormGroup, Percentage

myfile.write(str(newRecord))

myfile.write("\n")

myfile.close()

作为我任务的一部分,我需要按字母顺序排列 CSV 中的数据,我已经搜索并搜索了解决方案,但我无法找到适合我的解决方案。我对 Python 很陌生,所以最简单的解决方案将不胜感激。

【问题讨论】:

  • 您需要将整个 CSV 文件读入一个列表,对其进行排序,然后将其写回文件中。您还应该使用csv 模块。
  • “我找不到适合我的解决方案” - 然后写一个。
  • @deceze 有几列有几条记录。我怎么能把它放到一个列表中而不让它乱序呢?此外,我将如何对其进行排序,我正在使用csv 模块。它已在我的代码顶部导入。
  • @jonrsharpe 我不知道该怎么做,我的意思是我已经搜索了多个网站,但没有足够清晰的解决方案让我实施。
  • 嗯,你已经导入了它,但你似乎没有使用它的任何功能来读取或写入 CSV 文件......!?我也不确定几列会出现什么问题。

标签: python csv python-3.x


【解决方案1】:
import csv
from operator import itemgetter

with open('studentScores.csv', 'r') as f:
    data = [line for line in csv.reader(f)]

newRecord = [Score, Name, Gender, FormGroup, Percentage]
data.append(newRecord)

data.sort(key=itemgetter(1))  # 1 being the column number

with open('studentScores.csv', 'w') as f:
    csv.writer(f).writerows(data)

首先,它使用来自 csv 模块的函数来正确解析和创建 CSV 语法。其次,它将所有现有条目读入data,附加新记录,对所有记录进行排序,然后将它们转储回文件。

如果您在 CSV 文件中使用标题行向列添加名称,请查看 DictReader and DictWriter,这将允许您按名称而不是数字来处理列(例如在排序步骤中)。

【讨论】:

  • data.sort(key=itemgetter(1)) # 1 being the column number IndexError: list index out of range 我完全不知道这意味着什么......
  • 您的某一行可能是空的/其中包含少于 2 个项目。在排序之前使用print(data) 进行调试,看看您的所有行是否都有1 索引。
  • 是的,似乎有一个列正在创建,其中没有任何内容,如下所示:[]。我对从这里做什么感到震惊,你的解决方案到目前为止有效,我只需要解决这个问题。我会继续努力的,谢谢你的帮助。
猜你喜欢
  • 2017-11-19
  • 2016-08-23
  • 1970-01-01
  • 2018-05-05
  • 2015-06-13
  • 2011-08-29
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
相关资源
最近更新 更多