2024-05-23 14:50:01 发布
网友
在阅读LPTHW时,我开始阅读以下代码:
https://github.com/BrechtDeMan/secretsanta/blob/master/pairing.py
我一直在试图理解为什么输出CSV有双引号。关于这个问题,这里有几个问题,但我不是在摸索。在
引述是从哪里介绍的?在
编辑:我几周前给作者写过信,但一直没有回音。在
编辑2:输出的一个例子。。。在
"Alice,101,alice@mail.org,Wendy,204,wendy@mail.org"
在write_file函数中引入双引号。在
write_file
CSV文件表面看起来很简单,但迟早你会遇到一些更复杂的问题。第一个问题是:如果字段内容中出现表示分隔符的字符,应该怎么办?由于CSV格式没有真正的标准,不同的人对这个问题的正确答案有不同的看法。在
Pythoncsv库试图将这种复杂性和各种方法抽象出来,并使其更容易按照不同的规则读写CSV文件。这是由^{} class对象完成的。在
csv
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来引用该字段,默认为双引号字符(")。为什么最后整个字段都被双引号包围了。在
Dialect.quoting
csv.QUOTE_MINIMAL
Dialect.quotechar
"
快速而简单,但不正确的解决方案是将引用算法改为csv.QUOTE_NONE。这将告诉writer对象从不环绕字段,而是通过Dialect.escapechar转义特殊字符。根据文档,将其设置为None(默认值)将引发一个错误。我想把它设为空字符串就可以了。在
csv.QUOTE_NONE
Dialect.escapechar
None
正确的解决方案是给writer.writerrow输入预期的字段列表。应该这样做(未经测试):
writer.writerrow
一般来说,当一个字段中有一个分隔符字符时,需要(双)引号—如果该字段中有引号,则需要用另一个引号“转义”。在
你有你所说的输出和引用的例子吗?在
编辑(示例之后):
好的,整行在这里被视为一个字段。正如Miroslaw Zalewski所提到的,这些值应该被视为单独的字段,而不是一个长字符串。在
在
write_file
函数中引入双引号。在CSV文件表面看起来很简单,但迟早你会遇到一些更复杂的问题。第一个问题是:如果字段内容中出现表示分隔符的字符,应该怎么办?由于CSV格式没有真正的标准,不同的人对这个问题的正确答案有不同的看法。在
Python} class 对象完成的。在
csv
库试图将这种复杂性和各种方法抽象出来,并使其更容易按照不同的规则读写CSV文件。这是由^{write_file
函数的作者决定手动构造输出行,方法是将所有字段和分隔符字符合并在一起,但随后使用csv
模块将数据实际写入文件:csv
模块的这种不一致用法导致整行数据被视为单个字段。因为该字段包含用作字段分隔符的字符,Dialect.quoting
决定如何处理它。默认的引号配置,csv.QUOTE_MINIMAL
表示应该使用Dialect.quotechar
来引用该字段,默认为双引号字符("
)。为什么最后整个字段都被双引号包围了。在快速而简单,但不正确的解决方案是将引用算法改为
csv.QUOTE_NONE
。这将告诉writer对象从不环绕字段,而是通过Dialect.escapechar
转义特殊字符。根据文档,将其设置为None
(默认值)将引发一个错误。我想把它设为空字符串就可以了。在正确的解决方案是给
^{pr2}$writer.writerrow
输入预期的字段列表。应该这样做(未经测试):一般来说,当一个字段中有一个分隔符字符时,需要(双)引号—如果该字段中有引号,则需要用另一个引号“转义”。在
你有你所说的输出和引用的例子吗?在
编辑(示例之后):
好的,整行在这里被视为一个字段。正如Miroslaw Zalewski所提到的,这些值应该被视为单独的字段,而不是一个长字符串。在
相关问题 更多 >
编程相关推荐