这是Alex的答案,经过重新设计以支持列数据类型:
import csvimport operatordef 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 datetimedef 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']


