Ответ 1
import operator
sortedlist = sorted(reader, key=operator.itemgetter(3), reverse=True)
или используйте lambda
sortedlist = sorted(reader, key=lambda row: row[3], reverse=True)
Я хочу сортировать таблицу CSV по дате. Началась простая задача:
import sys
import csv
reader = csv.reader(open("files.csv"), delimiter=";")
for id, path, title, date, author, platform, type, port in reader:
print date
Я использовал модуль Python CSV для чтения в файле с этой структурой:
id;file;description;date;author;platform;type;port
Оптимальным решением было бы иметь клиент CSV, который обрабатывает файл как базу данных. Я не нашел ничего подобного.
Я надеюсь, что кто-то знает чудесную магию сортировки здесь;)
Спасибо,
Мариус
import operator
sortedlist = sorted(reader, key=operator.itemgetter(3), reverse=True)
или используйте lambda
sortedlist = sorted(reader, key=lambda row: row[3], reverse=True)
Читатель действует как генератор. В файле с некоторыми поддельными данными:
>>> import sys, csv
>>> data = csv.reader(open('data.csv'),delimiter=';')
>>> data
<_csv.reader object at 0x1004a11a0>
>>> data.next()
['a', ' b', ' c']
>>> data.next()
['x', ' y', ' z']
>>> data.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
Использование operator.itemgetter как Ignacio предполагает:
>>> data = csv.reader(open('data.csv'),delimiter=';')
>>> import operator
>>> sortedlist = sorted(data, key=operator.itemgetter(2), reverse=True)
>>> sortedlist
[['x', ' y', ' z'], ['a', ' b', ' c']]
в случае сортировка МНОГОКРАТНОЙ КОЛОНКИ:
with open('xxx.csv',newline='') as csvfile:
spamreader = csv.DictReader(csvfile, delimiter=";")
sortedlist = sorted(spamreader, key=lambda row:(row['title'],row['date']), reverse=False)
Сначала он сортировался на title
, а затем сортировал бы по date
.