【问题标题】:Sorting a list alphabetically from a CSV in Python by column按字母顺序从 Python 中的 CSV 按列对列表进行排序
【发布时间】:2016-02-28 19:06:50
【问题描述】:

我编写了一段代码,将数据发送到 .csv 文件,按名称排序,然后从测验中获得 3 个分数。我需要从创建的 .csv 文件中调用该数据,并按名称、数字和平均值按字母顺序对数据进行排序。但是,当我尝试按字母顺序对名称进行排序时,什么也没有出现。我对 Python 很陌生,所以我看不到我的错误在哪里。

这是我的代码中保存和(尝试)打印数据的部分。

if class_number == 2:
    f = open("Class 2" + ".csv", 'a')
    writer = csv.writer(f, delimiter =',')
    writer.writerow([name, count1, count2, count3])
    print ("Your scores were", count1, ",", count2, ", and", count3)

    print("Would you like to see previous results?")
    print("Press 1 to see previous results for your class. Press 2 to close the program")
    answer = int(input())
    if answer == 1:
        print("How would you like data to be sorted?")
        print("Press 1 for alphabetically")
        print("Press 2 for highest to lowest")
        print("Press 3 for average")
        score = input()
        if score == 1:
            sample = open("Class 2.csv", "r")
            csv1 = csv.reader(sample, delimiter=",")
            sort = sorted(csv1, key=operator.itemgetter(0))
            for eachline in sort:
                print("Class 2.csv", "r")

我真的很困惑我做错了什么。

编辑:我需要帮助的代码部分是

if score == 1:
            sample = open("Class 2.csv", "r")
            csv1 = csv.reader(sample, delimiter=",")
            sort = sorted(csv1, key=operator.itemgetter(0))
            for eachline in sort:
                print("Class 2.csv", "r")

由于某种原因,这部分不会显示,但如果没有“If score”部分,它会显示。

【问题讨论】:

  • 这里的确切问题是什么?代码的哪一部分?

标签: python sorting csv


【解决方案1】:

我已经使用包含一列的 csv 文件对此进行了测试,并且它有效。我假设你只想显示你的结果

import csv
import operator

sample = open("file.csv", "r")
csv_file = csv.reader(sample, delimiter=",")
sort = sorted(csv_file)
for eachline in sort:
    print eachline

【讨论】:

    【解决方案2】:

    您可以使用字典来保存从 csv 文件中读取的数据。并使用名称作为键。然后您可以对键进行排序并根据排序的键创建排序列表。这是使用名称进行排序的示例。

    sample = open("example.csv", "r")
    csv_file = csv.reader(sample, delimiter=",")
    
    named = {}
    for line in csv_file:
        # in case there are multiple entries with same name   
        # assuming names are in the first column
        named[line[0]] = named.get(line[0]) or []
        named[line[0]].append(line)
    
    sorted_name_key = sorted(named)
    name_sorted = []
    for key in sorted_name_key:
        name_sorted.extend(named[key])
    

    通过这种方式,您可以对所需的任何列进行排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-02
      • 2014-02-08
      • 2018-05-05
      • 1970-01-01
      • 2022-11-15
      • 1970-01-01
      相关资源
      最近更新 更多