当前位置:  开发笔记 > 编程语言 > 正文

LPTHW:CSV.writer周围的双引号

如何解决《LPTHW:CSV.writer周围的双引号》经验,为你挑选了1个好方法。



1> Mirek Długos..:

双引号在write_file功能中引入.

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

Python csv库试图抽象这种复杂性和各种方法,并使遵循不同规则更容易读取和写入CSV文件.这是由Dialect类对象完成的.

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使用预期的输入数据 - 字段列表.这应该做(未经测试):

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]])

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有