使用csv.DictReader读取时如何处理具有重复字段名的csv文件?

Eug*_*ski 6 python csv

我正在处理一个格式不正确的CSV文件; 它有重复的字段名称.

csv.DictReader只需使用相同名称覆盖第一列的第一列,并使用相同名称的第二列内容.但我需要具有重复名称的列的内容.

我无法DictReader.fieldnames直接分配参数.大约有一百列,每次都有不同的列数,例如:

product, price1, price2, price1,...,price100
car, 100, 300, 200,...,350
Run Code Online (Sandbox Code Playgroud)

输出: {'product':'car', 'price1': 200, 'price2':300}

我需要: {'product':'car', 'price1': 100, 'price2':300, 'price3': 200}

这样做的方法是什么?

Mar*_*ers 10

DictReader()在这种情况下不要使用.坚持使用常规读者.

您始终可以根据重新映射的字段名列表映射到字典:

with open(filename, 'rb') as csvfile:
    reader = csv.reader(csvfile)
    fieldnames = remap(next(reader))
    for row in reader:
        row = dict(zip(fieldnames, row))
Run Code Online (Sandbox Code Playgroud)

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]
Run Code Online (Sandbox Code Playgroud)