csv 读取器函数的 quotechar 参数如何工作?

Kra*_*tty 7 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)
Run Code Online (Sandbox Code Playgroud)

我的 csv 文件包含以下内容:

|Hello|,|My|,|name|,|is|,|John|
Run Code Online (Sandbox Code Playgroud)

输出给出了预期的字符串列表:

['Hello', 'My', 'name', 'is', 'John']
Run Code Online (Sandbox Code Playgroud)

当我的 csv 文件中的逗号之间有空格时,就会出现问题。例如,如果我在结束 | 后有一个空格 像这样的字段:

|Hello| ,|My| ,|name| ,|is| ,|John|
Run Code Online (Sandbox Code Playgroud)

它提供与以前相同的输出,但现在列表中的字符串中包含空格:

['Hello ', 'My ', 'name ', 'is ', 'John']
Run Code Online (Sandbox Code Playgroud)

据我了解, quotechar 参数只会考虑 | 之间的内容。象征。任何帮助是极大的赞赏!

Shu*_*rma 6

论据quotechar

一种单字符字符串,用于引用包含特殊字符(例如分隔符或引号字符)或包含换行符的字段。它默认为“”。

例如,

如果您的csv文件包含以下形式的数据

|Hello|,|My|,|name|,|is|,|"John"|
|Hello|,|My|,|name|,|is|,|"Tom"|
Run Code Online (Sandbox Code Playgroud)

那么在这种情况下,您不能使用默认值quotechar"因为它已经存在于 csv 数据的实体中,因此为了指示 csv 阅读器您希望"John"将其包含在输出中,您可以指定其他一些quotechar,它可能是|;或任何字符,具体取决于要求。

输出现在包含John和 并Tom用引号括起来,

['Hello', 'My', 'name', 'is', '"John"']
['Hello', 'My', 'name', 'is', '"Tom"']
Run Code Online (Sandbox Code Playgroud)

考虑另一个例子,其中 csv 字段本身包含delimiter,考虑csv文件包含

"Fruit","Quantity","Cost"
"Strawberry","1000","$2,200"
"Apple","500","$1,100"
Run Code Online (Sandbox Code Playgroud)

现在,在这种情况下,您必须quotechar明确指定来指示 csv 读取器,以便它可以区分 csv 字段中的实际分隔符(控制字符)和逗号(文字字符)。现在在这种情况下quotechar "也将起作用。


delimiter现在来到您的代码,您必须将文件中之前的额外空格替换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)
Run Code Online (Sandbox Code Playgroud)

这输出,

['Hello', 'My', 'name', 'is', 'John']
Run Code Online (Sandbox Code Playgroud)