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

如何正确解析含特殊字符与内部逗号的PostgreSQL导出CSV文件?

问题

从PostgreSQL导出的车辆详情CSV文件存在数据异常,解析时碰到两个棘手问题:

  • 老款路虎车型的英寸标识(比如100")被转义成了"100'"",用csv.reader(encoding="utf8")直接解析会报错;
  • 要是直接用split(",")拆分文本,又会把带内部逗号的引号包裹字段(比如"R1, STREETFIGHTER")错误拆成'"R1'和' STREETFIGHTER"'。

现有代码如下:

in_file = open(in_folder + in_file, "r", encoding="utf8")
for line in in_file:    
    row_list = line.split(",")

请问怎么实现不拆分引号内文本的CSV行解析?必须自己写解析逻辑吗?

解决方案

完全不需要自己写解析逻辑,Python自带的csv模块支持自定义引号和转义规则,刚好能适配PostgreSQL导出的这种格式:

1. 核心配置:指定引号与转义符

PostgreSQL导出CSV时,默认用双引号包裹字段,并用单引号转义字段内的双引号。只要给csv.reader设置两个参数就能解决问题:

  • quotechar='"': 识别双引号作为字段的包裹符;
  • escapechar="'": 把单引号当作双引号的转义符号,遇到'后面跟着的"就知道是字段内的内容,不是字段结束标记。

2. 完整可运行代码

import csv

# 用with语句自动管理文件,比直接open更安全
with open(in_folder + in_file, "r", encoding="utf8") as in_file:
    reader = csv.reader(in_file, quotechar='"', escapechar="'")
    for row in reader:
        # row就是解析后的完整行列表,引号内的逗号不会被拆分
        # 比如"R1, STREETFIGHTER"会变成列表里的单个元素"R1, STREETFIGHTER"
        # "100'""会被解析成"100""
        print(row)

3. 为什么这能解决你的两个问题

  • 针对英寸标识的转义问题:escapechar="'"让csv.reader正确识别"100'""里的'"是字段内的",不会把它当成字段结束符,解析后得到正常的100";
  • 针对引号内逗号的拆分问题:quotechar='"'"会把双引号包裹的整块内容当作单个字段,里面的逗号不会被当作分隔符,完美保留R1, STREETFIGHTER的完整性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 04:57:04