从文本文件中对特定列进行排序

时间:2017-04-20 21:32:11

标签: python list python-3.x sorting

我正在尝试从.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"?我该如何打印出来?

1 个答案:

答案 0 :(得分: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_resultslist对象,看起来像

[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')])]

有关docs

csv模块的详细信息

有关docs

OrderedDict的更多信息