按列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)
它将首先按title
sorting,然后按date
sorting。