按列sortingcsv

我想按datesortingCSV表格。 开始做一个简单的任务:

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 
  • date是ISO-8601,所以我可以很容易地对它进行sorting而不用parsing:2003-04-22例如
  • 我想按datesorting,最新的条目
  • 我如何让这个读者进入一个可sorting的数据结构? 我想我可以做一个date列表:datelist + =date,拆分和sorting。 不过,我必须重新确定CSV表格中的完整条目。 这不仅仅是对事物清单进行sorting。
  • csv似乎没有内置的sortingfunction

最佳的解决scheme是有一个CSV客户端,像数据库一样处理文件。 我没有find这样的事情。

我希望有人在这里知道一些很好的sorting魔法;)

谢谢,

马吕斯

 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作为Ignaciobuild议:

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

它将首先按titlesorting,然后按datesorting。