在python中按索引位置排序文件

时间:2015-11-10 02:36:22

标签: python sorting reorderlist

如果我想按学生编号对列表进行排序(下面的小样本但列表大于此值):

  • Stephen,97654,DOB:1985年3月5日
  • Kelly,58374,DOB:1986年12月18日
  • Brian,12587,DOB:1985年5月20日

    f = open('studentdb.txt') for line in f: g = line.split(',') print(g)

这给了我:

['Stephen', ' 97654', ' DOB: Mar 5', ' 1985\n'] ['Kelly', ' 58374', ' DOB: Dec 18', ' 1986\n'] ['Brian', ' 12587', ' DOB: May 20', ' 1985\n']

我如何分类文件并按学生编号重新排序?

2 个答案:

答案 0 :(得分:3)

使用csv读取它,然后对第二个字段进行排序:

import csv

with open(fn) as f:
    lines=[line for line in csv.reader(f)]
    print lines   # unsorted
    print sorted(lines, key=lambda line: int(line[1]))

首先打印文件:

[['Stephen', ' 97654', ' DOB: Mar 5', ' 1985'], 
 ['Kelly', ' 58374', ' DOB: Dec 18', ' 1986'], 
 ['Brian', ' 12587', ' DOB: May 20', ' 1985']]

然后排序版本:

[['Brian', ' 12587', ' DOB: May 20', ' 1985'], 
 ['Kelly', ' 58374', ' DOB: Dec 18', ' 1986'], 
 ['Stephen', ' 97654', ' DOB: Mar 5', ' 1985']]

获得排序版本后,重新打开文件进行写入,然后再次使用csv写出文件。

答案 1 :(得分:0)

您可以保存这样的列表列表:

f = open('studentdb.txt')
for line in f:
    g = line.split(',')
    StudentList.append(g)

然后用第二个元素排序:

StudentList.sort(key=lambda x: int(x[1]))