这是Alex的答案,经过重新设计以支持列数据类型:
import csv
import operator
def sort_csv(csv_filename, types, sort_key_columns):
"""sort (and rewrite) a csv file.
types: data types (conversion functions) for each column in the file
sort_key_columns: column numbers of columns to sort by"""
data = []
with open(csv_filename, 'rb') as f:
for row in csv.reader(f):
data.append(convert(types, row))
data.sort(key=operator.itemgetter(*sort_key_columns))
with open(csv_filename, 'wb') as f:
csv.writer(f).writerows(data)
我做的很蠢。我在IDLE中玩各种事情convert
,几天前写了一个函数。我忘了自己写的,而且很长一段时间都没有关闭IDLE,所以当我写上面的代码时,我以为convert
是内置函数。可悲的是没有。
这是我的实现,尽管John Machin的更好一些:
def convert(types, values):
return [t(v) for t, v in zip(types, values)]
用法:
import datetime
def date(s):
return datetime.strptime(s, '%m/%d/%y')
>>> convert((int, date, str), ('1', '2/15/09', 'z'))
[1, datetime.datetime(2009, 2, 15, 0, 0), 'z']