如何读取单元格含多个值的CSV并转换为带列表的字典
解决方案
错误原因
- 原代码的核心问题是直接用
split(",")拆分CSV整行:CSV规范中双引号包裹的字段内部的逗号不属于分隔符,手动拆分就会把带引号的内容拆碎,导致字段整体错位,和表头对应不上。 - 缺少对空值、单元格内多值的转换逻辑。
修复后代码
import csv csv_dict = {} with open(csv_file, 'r', newline='', encoding='utf-8') as f: # 用csv模块自带的DictReader直接读取,自动处理表头和带引号的字段 reader = csv.DictReader(f) for row in reader: type_key = row.pop('Type') processed_row = {} for field, value in row.items(): value = value.strip() if not value: # 空单元格赋值为空列表 processed_row[field] = [] elif ',' in value: # 单元格内有多个逗号分隔的值,拆分后存列表,每个元素去除首尾空格 processed_row[field] = [item.strip() for item in value.split(',')] # 若不需要拆分多值,仅要把整个内容作为列表单个元素,替换为下行代码即可 # processed_row[field] = [value] else: # 单个值保留字符串格式,若要统一存列表可改为 processed_row[field] = [value] processed_row[field] = value if type_key not in csv_dict: csv_dict[type_key] = [] csv_dict[type_key].append(processed_row)
运行结果
执行后打印csv_dict['TypeB'][0]的输出和需求完全匹配。
内容的提问来源于stack exchange,提问作者cy614
相关产品推荐
相关产品推荐

