Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 ;)

like image 684
wishi Avatar asked Jan 20 '10 09:01

wishi


1 Answers

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

or use lambda

sortedlist = sorted(reader, key=lambda row: row[3], reverse=True) 
like image 61
Ignacio Vazquez-Abrams Avatar answered Sep 20 '22 15:09

Ignacio Vazquez-Abrams