如何在Python中按逗号分割一行,但忽略引号内的逗号。

15

可能重复:
如何读取带双引号的CSV行?

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

所有项目都在引号中,并且其中一些引号内有其他逗号。我想将该行沿逗号拆分,但忽略引号中的逗号。 是否有一种在Python中执行此操作的方法,而不需要使用多个正则表达式语句。

例如:

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

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

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

我是否错过了line.split()中的简单选项?


9
使用csv模块。 - JBernardo
@GregHewgill (和其他三个人):并不是完全重复的问题。另一个问题特别关注于实现细节而不是使用库。 - johnsyweb
1
我正在从一个CSV文件中读取文本行。那么你真正想问的问题是:“如何解析CSV文件?”请问你真正想要得到答案的问题,这通常可以节省你和潜在回答者很多时间。 - Karl Knechtel
我觉得我的问题比简单的“如何解析CSV文件”更详细一些。对于简单的CSV文件,split()方法就足够了。 - chrisfs
2个回答

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']
[]

1
谢谢!那给了我所需的信息。 :) - chrisfs

-6

你可以尝试在逗号处进行分割,即"[引号][逗号][引号]"

另一种选择是使用转义字符,如果有人想要嵌入一个逗号到字符串中,他们可以使用\c,如果他们想要一个反斜杠,他们可以使用\\。然后你需要先分割字符串,再在处理之前取消转义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接