如何按逗号拆分行,但忽略引号内的逗号

15 投票
2 回答
33519 浏览
提问于 2025-04-17 03:50

可能重复的问题:
如何读取带有“?”的CSV行

我看到了一些相关的问题,但没有一个直接解决我想做的事情。
我正在从一个CSV文件中读取文本行。

所有的项目都被引号包围,有些引号内还有额外的逗号。
我想沿着逗号来分割这一行,但忽略引号内的逗号。
有没有办法在Python中做到这一点,而不需要写很多正则表达式?

举个例子:

"114111","Planes,Trains,and Automobiles","50","BOOK"

我希望将其解析成4个不同的变量值:

"114111"  "Planes,Trains,and Automobiles"  "50" "Book"

line.split()中有没有我遗漏的简单选项?

2 个回答

-7

你可以考虑用逗号“,”来分割,也就是“[引号][逗号][引号]”。

另一种选择是使用转义字符,也就是说,如果有人想在字符串里放一个逗号,他们可以用\c来表示;如果想放一个反斜杠,就用\\。这样的话,你需要先分割字符串,然后在处理之前把转义的字符还原回来。

40

如果你想从CSV文件中读取数据,可以使用Python自带的csv模块。这个模块可以帮你处理那些用引号括起来的、用逗号分隔的值。

示例

# cat test.py
import csv
with open('some.csv') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)
# cat some.csv
"114111","Planes,Trains,and Automobiles","50","BOOK"
# python test.py

['114111', 'Planes,Trains,and Automobiles', '50', 'BOOK']
[]

撰写回答