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

Python处理含引号内逗号的CSV文件并转换为字典

处理带引号包裹逗号的CSV数据问题

问题场景

需要处理外部供应商提供的CSV数据,列数固定但行数可变。示例数据如下:

Version,Relative Path,Author,Date,Comment,Link
1,somePath,someperson,01/20/2020,"Some phrase with punctuation including comas, but in which case it seems to be automatically formatted with quotes...",some.url
3,somePath,someperson,01/20/2020,Simple comment with no punctuation,another.url
50,somePath,someperson,01/20/2020,Another comment,some.url

原处理代码使用csv.DictReader,但带逗号的Comment字段被错误拆分,导致字典结构混乱。已知含逗号的评论均被双引号"包裹,需保留评论内的逗号,且仅使用Python 3.10.2标准库解决。

解决方案

Python标准库的csv模块默认支持识别双引号包裹的字段,自动忽略字段内的分隔符(逗号)。原代码出现问题可能是未显式指定编码或方言参数,以下是修正后的代码:

import csv

# 根据实际文件编码调整(如utf-8-sig、gbk)
with open("sample.csv", "r", encoding="utf-8") as csvFile:
    # 使用excel方言,自动处理双引号包裹的字段
    reader = csv.DictReader(csvFile, dialect="excel")
    data = {}
    for row_dict in reader:
        for key, value in row_dict.items():
            # 用setdefault替代列表拼接,提升效率
            data.setdefault(key, []).append(value)

print(data)

说明

  • csv.DictReader默认的excel方言完全符合CSV标准:双引号包裹的字段内的逗号会被视为字段内容的一部分,不会被当作分隔符拆分,自然保留评论内的逗号。
  • 若文件存在编码异常,需在open时指定正确编码(比如utf-8-sig用于处理带BOM的UTF-8文件)。
  • 使用dict.setdefault替代原代码的列表拼接方式,避免频繁创建新列表,处理大文件时效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:00:17