LPTHW:左右双引号CSV.wri文件

2024-05-23 14:50:01 发布

您现在位置:Python中文网/ 问答频道 /正文

在阅读LPTHW时,我开始阅读以下代码:

https://github.com/BrechtDeMan/secretsanta/blob/master/pairing.py

我一直在试图理解为什么输出CSV有双引号。关于这个问题,这里有几个问题,但我不是在摸索。在

引述是从哪里介绍的?在

编辑:我几周前给作者写过信,但一直没有回音。在

编辑2:输出的一个例子。。。在

"Alice,101,alice@mail.org,Wendy,204,wendy@mail.org"

Tags: csv代码pyhttpsorggithubmastercom
2条回答

write_file函数中引入双引号。在

CSV文件表面看起来很简单,但迟早你会遇到一些更复杂的问题。第一个问题是:如果字段内容中出现表示分隔符的字符,应该怎么办?由于CSV格式没有真正的标准,不同的人对这个问题的正确答案有不同的看法。在

Pythoncsv库试图将这种复杂性和各种方法抽象出来,并使其更容易按照不同的规则读写CSV文件。这是由^{} class对象完成的。在

write_file函数的作者决定手动构造输出行,方法是将所有字段和分隔符字符合并在一起,但随后使用csv模块将数据实际写入文件:

writer.writerow([givers_list[ind][1] + ',' + givers_list[ind][2]
                + ',' + givers_list[ind][3]
                + ',' + givers_list[rand_vec[ind]][1] + ','
                + givers_list[rand_vec[ind]][2] + ',' + givers_list[rand_vec[ind]][3]])

csv模块的这种不一致用法导致整行数据被视为单个字段。因为该字段包含用作字段分隔符的字符,Dialect.quoting决定如何处理它。默认的引号配置,csv.QUOTE_MINIMAL表示应该使用Dialect.quotechar来引用该字段,默认为双引号字符(")。为什么最后整个字段都被双引号包围了。在

快速而简单,但不正确的解决方案是将引用算法改为csv.QUOTE_NONE。这将告诉writer对象从不环绕字段,而是通过Dialect.escapechar转义特殊字符。根据文档,将其设置为None(默认值)将引发一个错误。我想把它设为空字符串就可以了。在

正确的解决方案是给writer.writerrow输入预期的字段列表。应该这样做(未经测试):

^{pr2}$

一般来说,当一个字段中有一个分隔符字符时,需要(双)引号—如果该字段中有引号,则需要用另一个引号“转义”。在

你有你所说的输出和引用的例子吗?在

编辑(示例之后):

好的,整行在这里被视为一个字段。正如Miroslaw Zalewski所提到的,这些值应该被视为单独的字段,而不是一个长字符串。在

相关问题 更多 >