我目前对 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 参数只会考虑 | 之间的内容。象征。任何帮助是极大的赞赏!
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)