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

Python 使用csv.DictReader读取时,如何处理具有重复字段名的csv文件?,python,csv,Python,Csv,我正在使用格式不正确的CSV文件;它有重复的字段名 csv.DictReader只是用同名第二列的内容覆盖同名第一列。但我需要具有重复名称的列的两个内容 我无法直接分配DictReader.fieldnames参数。大约有100列,每次都有不同的列数,例如: product, price1, price2, price1,...,price100 car, 100, 300, 200,...,350 输出:{'product':'car','price1':200,'price2':300}

我正在使用格式不正确的CSV文件;它有重复的字段名

csv.DictReader
只是用同名第二列的内容覆盖同名第一列。但我需要具有重复名称的列的两个内容

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

product, price1, price2, price1,...,price100
car, 100, 300, 200,...,350
输出:
{'product':'car','price1':200,'price2':300}

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


怎么做?

在这种情况下,不要使用
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]

您可以自己指定
字段名
,但不完全清楚如何处理重复项。为什么需要使用
DictReader()
?如果你的字段映射不正确,你可以坚持使用普通阅读器。@MartijnPieters谢谢你的建议。我对Python和一般编程都是新手。现在我很清楚我应该使用
csv.reader