Python CSV编写器,如何处理引号以避免输出中的三重引号
我正在使用
Python的CSV模块,特别是编写器.我的问题是如何将双引号添加到列表中的单个项目并让编写器以与print语句相同的方式编写字符串?
例如: import csv #test "data" test = ['item1','01','001',1] csvOut = csv.writer(open('file.txt','a')) #'a' used for keeping past results test[1] = '"'+test[1]+'"' print test #prints: ['item1','"01"',1] csvOut.writerow(test) #written in the output file: item1,"""01""",001,1 #I was expecting: item1,"01",1 del csvOut 我累了添加一个quoting = csv.QUOTE_NONE选项,但这引发了一个错误.我猜这与许多csv方言有关,我希望避免过多地挖掘它. 回想起来,我可能已经构建了我的初始数据集,并且可能避免了这种情况的需要,但此时好奇心真的让我变得更好(这是一个简化的例子):你如何保持书面输出不添加这些额外的报价? 解决方法
它实际上并不是三重引用,尽管看起来就是这样.尝试使用另一个示例来查看:
test = ['item1','abc"def'] 现在你会看到它写道: "abc""def" 换句话说,它只是在你的字符串周围包装引号,并通过将它们加倍来转义字面引号字符,因为这是Excel样式CSV处理引号字符的默认方式. 问题是,你想要什么格式?几乎任何你想要的东西(在合理范围内)都是可行的,但你必须选择一些东西.反斜杠逃避报价?反斜杠 – 逃避一切而不是首先使用引号?单引号而不是双引号? 例如,这看起来像一个答案: csvOut = csv.writer(open('file.txt','a'),quotechar="'") …直到你有一个像Filet O’Fish这样的项目,并且整个事情都被单引号并且’加倍并且你有完全相同的问题,你试图避免.如果你的目标是人类的可读性,并且’在你的数据中不太常见“,那实际上可能是正确的答案,但它并不是一个完美的答案. 实际上,没有答案是完美的:你需要一些方法来引用或逃避逗号 – 以及其他东西,比如换行符 – 你这样做的方式是至少增加一个需要引用加倍的字符或逃过一劫.如果你知道你的数据中从来没有任何逗号,换行符等,并且至少还有一个你知道的其他角色永远不会出现,那么你可以将quotechar设置为另一个角色,或者将escapechar设置为其他角色和quoting = QUOTE_NONE.但是第一次有人意外地使用了你确定永远不会出现的角色,你的代码就会崩溃,所以你最好确定一下. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |