wishi wishi - 6 months ago 37
Python Question

sort csv by column

I want to sort a CSV table by date. Started out being a simple task:

import sys
import csv

reader = csv.reader(open("files.csv"), delimiter=";")

for id, path, title, date, author, platform, type, port in reader:
print date


I used Python's CSV module to read in a file with that structure:

id;file;description;date;author;platform;type;port



  • The date is ISO-8601, therefore I can sort it quite easily without parsing: 2003-04-22 e. g.

  • I want to sort the by date, newest entries first

  • How do I get this reader into a sortable data-structure? I think with some effort I could make a datelist: datelist += date, split and sort. However I have to re-identify the complete entry in the CSV table. It's not just sorting a list of things.

  • csv doesn't seem to have a built in sorting function



The optimal solution would be to have a CSV client that handles the file like a database. I didn't find anything like that.

I hope somebody knows some nice sorting magic here ;)

Thanks,

Marius

Answer
import operator
sortedlist = sorted(reader, key=operator.itemgetter(3), reverse=True)

or use lambda

sortedlist = sorted(reader, key=lambda row: row[3], reverse=True)