我正在使用格式不佳的CSV文件;它有重复的字段名称。
csv.DictReader
只是覆盖具有相同名称的第一列,第二列的内容具有相同的名称。但我需要具有重复名称的列的内容。
我无法直接指定DictReader.fieldnames
参数。大约有一百列,每次都有不同的列数,例如:
product, price1, price2, price1,...,price100
car, 100, 300, 200,...,350
输出:{'product':'car', 'price1': 200, 'price2':300}
我需要:{'product':'car', 'price1': 100, 'price2':300, 'price3': 200}
这样做的方法是什么?
答案 0 :(得分:9)
在这种情况下,请勿使用DictReader()
。坚持使用常规读者。
您始终可以根据重新映射的字段名列表映射到字典:
with open(filename, 'rb') as csvfile:
reader = csv.reader(csvfile)
fieldnames = remap(next(reader))
for row in reader:
row = dict(zip(fieldnames, row))
其中remap()
函数可以重新编号您的编号列,或者如果列名重复,则附加额外信息。
重新编号可能很简单:
from itertools import count
def remap(fieldnames):
price_count = count(1)
return ['price{}'.format(next(price_count)) if f.startswith('price') else f
for f in fieldnames]