在Python中读取带有重复列标题的csv

问题描述 投票:0回答:1

我想在Python中将csv作为字典读取,但现在我遇到了一个问题,因为csv包含多次使用的标题,如下所示:

id 名字 标签 标签
01 一个 我的任务 我的产品
02 两个 我的标签

将 csv 导入 python 的标准方法如下所示:

# import csv
import csv
# read csv file to a list of dictionaries
with open('data.csv', 'r') as file:
    csv_reader = csv.DictReader(file)
    data = [row for row in csv_reader]
print(data)

遗憾的是,如果有多个“标签”值,则此代码会吞掉第一个“标签”值。此代码输出:

[
    {'id': '01', 'name': 'one', 'labels': 'myproduct'},
    {'id': '02', 'name': 'two', 'labels': 'mylabel'},
]

有没有办法在不变得复杂的情况下读取“标签”的第二个值?我的首选输出如下所示:

[
    {'id': '01', 'name': 'one', 'labels': ['mytask', 'myproduct']},
    {'id': '02', 'name': 'two', 'labels': 'mylabel'},
]
python csv header
1个回答
0
投票

试试这个:

import csv
from collections import defaultdict

# Read csv file and store data in a defaultdict
with open('data.csv', 'r') as file:
    csv_reader = csv.reader(file)
    headers = next(csv_reader)
    data_dict = defaultdict(list)

    for row in csv_reader:
        for header, value in zip(headers, row):
            data_dict[header].append(value)

# Convert defaultdict to the desired format
data = []
for i in range(len(data_dict[headers[0]])):
    row_dict = {header: data_dict[header][i] for header in headers}
    for key, value in row_dict.items():
        if headers.count(key) > 1:
            row_dict[key] = [v for v in data_dict[key][i:] if v]
    data.append(row_dict)

print(data)
© www.soinside.com 2019 - 2024. All rights reserved.