Вот ответ Алекса, переработанный для поддержки типов данных столбца:
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)
Edit:
Я сделал глупость. Я играл с различными вещами в IDLE и написал функцию convert
пару дней назад. Я забыл, что написал это, и долго не закрывал IDLE - поэтому, когда я писал выше, я думал, что convert
- встроенная функция К сожалению, нет.
Вот моя реализация, хотя у Джона Макина лучше:
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']