【发布时间】:2011-02-28 05:19:39
【问题描述】:
以下函数将一个 CSV 文件解析为一个字典列表,其中列表中的每个元素都是一个字典,其中的值由文件的标题(假设为第一行)索引。
这个函数非常非常慢,对于一个相对较小的文件(少于 30,000 行)大约需要 6 秒。
如何加快速度?
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)
回应cmets:
我知道有一个 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 将字段解析为它们的类型?
谢谢。
谢谢。
【问题讨论】:
-
你知道有一个
csvmodule 对吗? -
如果有
deadbeef,那么显然它是一个基数为16的整数,对吧? Python 不会猜测,你也不应该。