【问题标题】:Sort a specific column from a text file对文本文件中的特定列进行排序
【发布时间】:2017-09-17 17:21:32
【问题描述】:

我正在尝试对 .txt 文件中的列进行排序。我要做一个积分登记系统,我要保存球员的名字和他的三圈。

我将我的值保存在文本文件中,如下所示:

 1. name;lap_1;lap_2;lap_3;
 2. name;lap_1;lap_2;lap_3;
 3. name;lap_1;lap_2;lap_3;

在我的代码中,我将它们写入文件,如下所示:

for result in results:
    my_file.write("{}:{}:{}:{}:{}:{};\n".format(result["name"],
                                                result["lap1"],
                                                result["lap2"],
                                                result["lap3"],
                                                result["total"],
                                                result["average"]))

如何对每一列进行排序,例如"name"?以及如何打印出来?

【问题讨论】:

标签: python list python-3.x sorting


【解决方案1】:

首先,正如@sgrg 建议的那样,使用 CSV 文件格式,例如。 G。我们可以简单地写成

import csv


def write_results(results, fields_names):
    # or use mode="a" if you want to append
    with open("my_file.csv", mode="w", newline="") as my_file:
        csv_writer = csv.DictWriter(my_file, fieldnames=fields_names, delimiter=";")
        # remember: you don"t need to add headers in "append" mode
        csv_writer.writeheader()
        for result in results:
            csv_writer.writerow(result)

然后阅读

def read_results(fields_names):
    with open("my_file.csv", mode="r") as my_file:
        # ignoring headers
        next(my_file)
        csv_reader = csv.DictReader(my_file, fieldnames=fields_names, delimiter=";")
        return list(csv_reader)

可以通过名称对结果进行排序

sorted_results = sorted(results, key=lambda result: result["name"])

用法

fields_names = ["name", "lap1", "lap2", "lap3", "total", "avarage"]
results_tuples = [("Luke", "lap1_value", "lap2_value", "lap3_value", 100, 96.3),
                  ("Stephen", "lap1_value", "lap2_value", "lap3_value", 100, 96.3),
                  ("Adrian", "lap1_value", "lap2_value", "lap3_value", 100, 96.3)]
results = [dict(zip(fields_names, result_tuple)) for result_tuple in results_tuples]
write_results(results,
              fields_names=fields_names)
results = read_results(fields_names)
sorted_results = sorted(results, key=lambda result: result["name"])

在给定的示例中,results 是一个 list 对象,看起来像

[{'avarage': 96.3,
  'lap1': 'lap1_value',
  'lap2': 'lap2_value',
  'lap3': 'lap3_value',
  'name': 'Luke',
  'total': 100},
 {'avarage': 96.3,
  'lap1': 'lap1_value',
  'lap2': 'lap2_value',
  'lap3': 'lap3_value',
  'name': 'Stephen',
  'total': 100},
 {'avarage': 96.3,
  'lap1': 'lap1_value',
  'lap2': 'lap2_value',
  'lap3': 'lap3_value',
  'name': 'Adrian',
  'total': 100}]

sorted_results 是一个list 对象,看起来像

[OrderedDict([('name', 'Adrian'),
              ('lap1', 'lap1_value'),
              ('lap2', 'lap2_value'),
              ('lap3', 'lap3_value'),
              ('total', '100'),
              ('avarage', '96.3')]),
 OrderedDict([('name', 'Luke'),
              ('lap1', 'lap1_value'),
              ('lap2', 'lap2_value'),
              ('lap3', 'lap3_value'),
              ('total', '100'),
              ('avarage', '96.3')]),
 OrderedDict([('name', 'Stephen'),
              ('lap1', 'lap1_value'),
              ('lap2', 'lap2_value'),
              ('lap3', 'lap3_value'),
              ('total', '100'),
              ('avarage', '96.3')])]

有关csv 模块的更多信息,请访问docs

更多关于OrderedDict的信息docs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 2019-10-19
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    相关资源
    最近更新 更多