2015-11-10 3 views
0

Если бы я хотел, чтобы отсортировать список по количеству студентов (небольшой образец ниже, но список будет больше, чем это):сортировка файлов по позиции индекса в питоне

  • Стефан, 97654, DOB: Март 5, 1985
  • Келли, 58374, DOB: 18 декабря 1986
  • Брайан, 12587, DOB: Май 20, 1985

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

Как бы идти о сортировке файла и изменение порядка его по количеству студентов?

+0

Можете ли вы прочитать весь файл в памяти? – dawg

ответ

0

Вы можете сохранить список список, как это:

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

Затем сортировать по второму элементу с:

StudentList.sort(key=lambda x: int(x[1])) 
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 снова.

Смежные вопросы