在python中是否有强类型的csv阅读器?

时间:2012-03-15 13:02:08

标签: python csv

我正在使用csv python包来读取这样的csv文件:

r = csv.DictReader(open(r'd:\aaa.csv', 'rb'))
for row in r:
  print row

问题是结果字典中的所有值都是字符串,我需要将它们转换为相应的类型。我在列名和类型之间有一个映射。

这里有快捷方式,还是我必须自己完成所有这些快捷方式?

修改

我已将https://stackoverflow.com/a/9720733/80002标记为答案。只是,我稍微修改了它。如果我要对它进行后处理,没有必要使用DictReader,所以这是我对Sven代码的修改:

r = csv.reader(open(r'd:\aaa.csv', 'rb'))
header = r.next()
converters = [converters_map[c] for c in header]
for row in r:
  row = {title:converter(value) for title, converter, value in zip(header, converters, row)}
  print row

1 个答案:

答案 0 :(得分:4)

如果您有将字符串转换为相应类型的转换器函数字典,那么您只需要

with open("d:/aaa.csv", "rb") as input_file:
    reader = csv.DictReader(input_file)
    for row in reader:
        row = {k: converters[k](v) for k, v in row.items()}
        print row

(Python 2.7。对于早期版本,使用dict()而不是字典理解。)

您可以将此代码包装在生成器函数中(只需使用yield row而不是print row)。