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

如何处理带引号内逗号的CSV数据,拆分时保留引号内内容为单个元素?

最优解决方案:用Python内置csv模块处理带引号的CSV数据

嘿,这个坑我之前踩过!直接用.split(',')确实会把引号包裹的字段里的逗号也拆分,完全不符合需求。其实不用自己费劲写正则(毕竟CSV的规则比看起来复杂,比如转义引号、跨行字段这些边缘情况),Python自带的csv模块就是专门解决这个问题的,这才是最可靠的方案。

方法一:用csv.reader解析单行/多行数据

csv.reader会自动识别引号包裹的字段,把字段内的逗号当作内容的一部分,不会拆分。举个例子,针对你给出的原始数据:

import csv
from io import StringIO

# 你的原始数据行
data_line = '14,Amazing,Mark of the Ninja,PC,9.0,"Action, Adventure",Y,2012,9,7'

# 用StringIO把字符串转换成csv.reader能处理的类文件对象
reader = csv.reader(StringIO(data_line))
for row in reader:
    print(row)

运行后输出的列表完全符合你的需求:

['14', 'Amazing', 'Mark of the Ninja', 'PC', '9.0', 'Action, Adventure', 'Y', '2012', '9', '7']

如果你的数据是保存在文件里的,就更简单了,直接打开文件传给csv.reader就行:

with open('your_game_reviews.csv', 'r', encoding='utf-8') as f:
    reader = csv.reader(f)
    for row in reader:
        # 处理每一行数据
        print(row)

(可选)方法二:正则表达式方案(不推荐)

如果你非要用正则(比如场景限制不能用csv模块),可以用这个正则来匹配符合规则的字段,但要注意它只能处理基础场景,碰到转义引号、跨行字段这类复杂情况会失效:

import re

data_line = '14,Amazing,Mark of the Ninja,PC,9.0,"Action, Adventure",Y,2012,9,7'
# 匹配:要么是不含逗号和引号的普通字段,要么是引号包裹的字段(支持转义引号"")
pattern = r'(?<!")(?:^|,)(?!")([^,"]+|"(?:[^"]|"")*")(?<!")(?:,|$)'
matches = re.findall(pattern, data_line)
# 去掉字段的引号,并还原转义的引号
processed_row = [field.strip('"').replace('""', '"') for field in matches]
print(processed_row)

为什么优先推荐csv模块?

CSV格式有很多容易忽略的细节:比如字段内的转义引号("He said, ""Great game!""",8.5)、字段内的换行符等,自己写正则很难覆盖所有情况,而Python的csv模块是完全遵循CSV标准实现的,能处理所有合法的CSV格式,稳定性和可靠性都远高于自定义正则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:26:40