Python csv阅读器函数的quotechar参数是如何工作的?

Python csv阅读器函数的quotechar参数是如何工作的?,python,csv,Python,Csv,我目前对quotechar参数的理解是,它围绕着用逗号分隔的字段。我正在阅读python的csv文档,并编写了类似的代码: import csv with open("test.csv", newline="") as file: reader = csv.reader(file, delimiter=",", quotechar="|") for row in reader: print(row) 我的csv文件包含以下内容: |Hello|,|My|,|na

我目前对quotechar参数的理解是,它围绕着用逗号分隔的字段。我正在阅读python的csv文档,并编写了类似的代码:

import csv
with open("test.csv", newline="") as file:
    reader = csv.reader(file, delimiter=",", quotechar="|")
    for row in reader:
        print(row)
我的csv文件包含以下内容:

|Hello|,|My|,|name|,|is|,|John|
输出提供了预期的字符串列表:

['Hello', 'My', 'name', 'is', 'John']
当我的csv文件中逗号之间有空格时,问题就出现了。 例如,如果我在一个字段的结尾|后有一个空格,如下所示:

|Hello| ,|My| ,|name| ,|is| ,|John|
它提供与以前相同的输出,但现在列表中的字符串中包含一个空格:

['Hello ', 'My ', 'name ', 'is ', 'John']
我的理解是,QuoTeCar参数只考虑符号之间的关系。 非常感谢您的帮助

quotechar
参数为 一个单字符字符串,用于引用包含特殊字符的字段 字符,如分隔符或引号,或包含 新行字符。它默认为''

例如,

['Hello', 'My', 'name', 'is', 'John']
如果您的
csv
文件包含表单的数据

|Hello|,|My|,|name|,|is|,|"John"|
|Hello|,|My|,|name|,|is|,|"Tom"|
然后,在这种情况下,您不能使用默认的
quotechar
,它是
,因为它已经存在于csv数据的实体中,所以要指示csv阅读器希望
“John”
,因为它在输出中,您将指定一些其他的
quotechar
,它可能是
或任何字符,具体取决于要求

输出现在包括引号中的
John
Tom

['Hello', 'My', 'name', 'is', '"John"']
['Hello', 'My', 'name', 'is', '"Tom"']

<强>考虑另一个例子< /强>其中CSV字段本身包含“代码>分隔符< /代码>,请考虑<代码> CSV 文件包含

"Fruit","Quantity","Cost"
"Strawberry","1000","$2,200"
"Apple","500","$1,100"
现在,在这种情况下,您必须明确指定
quotechar
来指示csv读取器,以便它能够在csv字段中区分实际的分隔符(控制字符)和逗号(文字字符)。现在在这种情况下,
quotechar
也将起作用


现在谈到您的代码,您必须用空字符串替换
csv
文件中
分隔符
之前的多余空格。您可以通过以下方式执行此操作:

试试这个:

from io import StringIO

with open("test.csv", newline="") as f:
    file = StringIO(f.read().replace(" ,", ","))
    reader = csv.reader(file, delimiter=",", quotechar="|")
    for row in reader:
        print(row)
此输出,

['Hello', 'My', 'name', 'is', 'John']

是的,这会起作用,但我正试图确切地理解这个quotechar参数的作用以及它是如何工作的。@KrabbyPatty希望这有助于您明确理解。我建议不要在引号外放置空格-不同的解析器可能会产生不同的结果。如果需要空格,请将其放在引号内,或者不使用引号字段中应包含字段“应”周围的空格,但一旦出现引号且空格在引号之外,解析器的行为就会有所不同(有些甚至可能引发解析错误)。