Python csv阅读器函数的quotechar参数是如何工作的?
我目前对quotechar参数的理解是,它围绕着用逗号分隔的字段。我正在阅读python的csv文档,并编写了类似的代码: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
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希望这有助于您明确理解。我建议不要在引号外放置空格-不同的解析器可能会产生不同的结果。如果需要空格,请将其放在引号内,或者不使用引号字段中应包含字段“应”周围的空格,但一旦出现引号且空格在引号之外,解析器的行为就会有所不同(有些甚至可能引发解析错误)。