Python CSV writer,如何处理引号以避免输出中的三重引号

标签 python csv

我正在使用 Python 的 CSV 模块,特别是 writer。我的问题是如何将双引号添加到列表中的单个项目,并让作者以与打印语句相同的方式编写字符串?

例如:

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"', '001', 1]
csvOut.writerow(test)
#written in the output file: item1,"""01""",001,1
#I was expecting: item1,"01",001,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。但是第一次有人出乎意料地使用了你确信永远不会出现的字符时,你的代码就会崩溃,所以你最好确定一下。

关于Python CSV writer,如何处理引号以避免输出中的三重引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25023955/

相关文章:

python - PyQt QWizard 验证和按钮覆盖

python - 从 Pandas 聚合 ("FutureWarning: using a dict with renaming is deprecated"重命名结果列)

python - Pandas read_csv 声明 dtype convets 列不正确

Java 正则表达式 for ,后面不跟空格

python - 合并在列中迭代的两个数据帧

python - 使用 ndb.blobproperty 引发的值错误

c - 从标准输入输入文件时无限读取输入

python - 在python中用逗号作为小数点分隔符编写csv

json - 配置单元 : How to explode a JSON column embedded in a CSV file?

python - 使用 pandas 循环合并大量 csv 文件