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

csv.reader转义符失效:无法保留\032格式字符问题

CSV解析时保留非引号字段中的\032转义序列问题

我的CSV文件中有一行内容:

zeroconf.net,TXT,rockview\032entrance._http._tcp.ietf98,"\"path=/\"",2023-05-14T01:41:55.954Z,""

我期望解析后得到:

['zeroconf.net', 'TXT', 'rockview\\032garage._http._tcp.ietf98', '"path=/\"', '2023-05-14T01:41:55.954Z', '']

但使用以下csv.reader配置时,"\"path=/\""字段解析正常,rockview\032garage._http._tcp.ietf98却被转换成rockview032garage._http._tcp.ietf98,不符合预期:

csv.reader(f, doublequote=False, escapechar="\\", quotechar='"', quoting=csv.QUOTE_MINIMAL)

实际解析结果:

['zeroconf.net', 'TXT', 'rockview032garage._http._tcp.ietf98', '"path=/\"', '2023-05-14T01:41:55.954Z', '']

问题原因

问题出在escapechar="\\"的配置上——csv.reader会将所有位置的反斜杠视为转义符,自动移除反斜杠并保留后续字符。对于非引号包裹的rockview\032...字段,解析器会把\0当成转义组合,直接去掉反斜杠,导致\032变成032。

解决方案

要兼顾引号字段的正常解析和非引号字段中反斜杠的保留,可以先预处理CSV内容,将非引号区域内的单个反斜杠替换为两个反斜杠(让解析器将其识别为普通反斜杠),再进行解析:

import csv
from io import StringIO

# 读取原始CSV文件内容
with open("your_file.csv", "r", encoding="utf-8") as f:
    raw_content = f.read()

# 预处理:仅转义非引号内的反斜杠
processed_chars = []
in_quote = False
for char in raw_content:
    if char == '"':
        in_quote = not in_quote
        processed_chars.append(char)
    elif char == "\\" and not in_quote:
        # 非引号内的反斜杠替换为两个,让解析器保留单个反斜杠
        processed_chars.append("\\\\")
    else:
        processed_chars.append(char)
processed_content = "".join(processed_chars)

# 解析处理后的内容
with StringIO(processed_content) as f:
    reader = csv.reader(f, doublequote=False, escapechar="\\", quotechar='"', quoting=csv.QUOTE_MINIMAL)
    for row in reader:
        print(row)

这样处理后,非引号字段中的\032会被保留,同时引号字段的解析逻辑不受影响,最终得到符合预期的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:05:29