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

Python读取含嵌套双引号的CSV,如何不修改文件修正解析结果?

解决CSV嵌套未转义双引号的解析问题

问题场景

现有test.csv文件内容如下:

"N";"INFO"
"1";"<a href="www.google.it">www.google.it</a>"

使用以下Python代码读取:

import csv
with open('test.csv', newline='') as csvfile:
    reader=csv.DictReader(csvfile, delimiter=';')
    for p in reader:
        print("%s %s" % (p['N'], p['INFO']))

当前输出出现解析异常:

1 <a href=www.google.it&quot;>www.google.it</a>&quot;

期望输出仅移除字段首尾的包裹双引号,保留内部双引号及原始内容:

1 <a href="www.google.it">www.google.it</a>

解决方案

方法1:关闭自动引号解析+手动清理字段

由于CSV使用;作为分隔符,字段仅靠首尾双引号包裹,内部双引号未做转义,可关闭CSV解析器的自动引号处理逻辑,再手动去除每个字段首尾的双引号:

import csv

with open('test.csv', newline='') as csvfile:
    reader = csv.DictReader(csvfile, delimiter=';', quoting=csv.QUOTE_NONE)
    for p in reader:
        cleaned_n = p['N'].strip('"')
        cleaned_info = p['INFO'].strip('"')
        print(f"{cleaned_n} {cleaned_info}")

方法2:自定义字段清理函数

如果需要更灵活的字段处理逻辑(比如兼容部分未用双引号包裹的字段),可以编写清理函数批量处理:

import csv

def clean_field(value):
    return value.strip('"') if value.startswith('"') and value.endswith('"') else value

with open('test.csv', newline='') as csvfile:
    reader = csv.DictReader(csvfile, delimiter=';')
    for p in reader:
        cleaned_data = {k: clean_field(v) for k, v in p.items()}
        print(f"{cleaned_data['N']} {cleaned_data['INFO']}")

方法3:指定转义字符(兼容场景有限)

如果CSV的格式可以被识别为内部双引号属于未正确转义的情况,可尝试设置escapechar参数,但该方法对格式兼容性要求较高,仅推荐在特定场景使用:

import csv

with open('test.csv', newline='') as csvfile:
    reader = csv.DictReader(csvfile, delimiter=';', escapechar='"')
    for p in reader:
        print(f"{p['N']} {p['INFO']}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 09:24:19