следующая функция разбирает файл CSV в список словарей, где каждый элемент в списке является словарем, значения которого индексируются заголовком файла (предполагается, что это первая строка).
эта функция работает очень медленно, ~ 6 секунд для файла, который относительно мал (менее 30000 строк).
как я могу ускорить его?
def csv2dictlist_raw(filename, delimiter='\t'):
f = open(filename)
header_line = f.readline().strip()
header_fields = header_line.split(delimiter)
dictlist = []
# convert data to list of dictionaries
for line in f:
values = map(tryEval, line.strip().split(delimiter))
dictline = dict(zip(header_fields, values))
dictlist.append(dictline)
return (dictlist, header_fields)
в ответ на комментарии:
Я знаю, что есть модуль CSV, и я могу использовать его так:
data = csv.DictReader(my_csvfile, delimiter=delimiter)
это намного быстрее. Однако проблема заключается в том, что он не приводит к автоматическому приведению чисел, которые, очевидно, являются числами с плавающей точкой и целыми числами, а делает их строками. Как я могу это исправить?
Использование класса "Sniffer" не работает для меня. Когда я пробую это на моих файлах, я получаю сообщение об ошибке:
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/csv.py", line 180, in sniff
raise Error, "Could not determine delimiter"
Error: Could not determine delimiter
Как я могу заставить DictReader анализировать поля по их типам, когда это очевидно?
спасибо.
спасибо.