You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将CSV读取的列表转为字典?及移除字典中的字符

问题

读取CSV文件时,行开头总会附加\ufeff字符,使用以下代码读取后得到列表格式输出:

r = unicodecsv.reader(f, encoding='utf-8-sig')

输出示例:

line: ['nickname', 'name', 'phone', 'address']
line: ['Harry', 'Harry James Potter', 'N/A', '4 Pivet Drive Little Whinging, Surrey']
line: ['Sirius', 'Sirius Black', 'N/A', '12 Grimald Place London']
line: []

需要实现两个需求:

  1. 将上述行转为以第一行作为键的字典列表;
  2. 移除字典键中已存在的\ufeff字符(尝试dictA.pop('\ufeffnickname', None)无效,且字典无法直接使用replace方法)。

解决方案

1. 转为以表头为键的字典列表

先读取表头,再遍历后续行(跳过空行),通过zip将表头与行数据配对生成字典:

import unicodecsv

with open('target.csv', 'rb') as f:
    reader = unicodecsv.reader(f, encoding='utf-8-sig')
    # 读取第一行作为表头
    headers = next(reader)
    # 生成字典列表,过滤空行
    result = []
    for row in reader:
        if row:  # 跳过空行
            result.append(dict(zip(headers, row)))

print(result)

2. 移除字典键中的\ufeff字符

\ufeff是UTF-8 BOM字符,即便指定了utf-8-sig仍可能残留。可以通过两种方式处理:

方式一:生成字典前清洗表头

提前处理表头的每个键,移除BOM字符后再生成字典:

import unicodecsv

with open('target.csv', 'rb') as f:
    reader = unicodecsv.reader(f, encoding='utf-8-sig')
    headers = next(reader)
    # 移除每个表头键中的BOM字符
    cleaned_headers = [key.strip('\ufeff') for key in headers]
    result = []
    for row in reader:
        if row:
            result.append(dict(zip(cleaned_headers, row)))

方式二:清洗已生成的字典

如果已经得到带BOM键的字典,通过遍历键值对生成新字典:

# 假设dictA是带BOM键的目标字典
cleaned_dict = {key.strip('\ufeff'): value for key, value in dictA.items()}

说明:之前pop('\ufeffnickname')无效,是因为实际键是\ufeff与nickname的拼接,而非完整字符串'\ufeffnickname',直接清洗每个键的BOM字符更可靠。

内容的提问来源于stack exchange,提问作者realtime

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 20:30:28