Python CSV编写器引用带有额外空格的字符串

时间:2016-04-20 03:15:41

标签: python csv

我的数据看起来像这样:

data = [
  [" trailing space", 19, 100],
  [" ", 19, 100],
]

writer = csv.writer(csv_filename, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)

输出

 trailing space,19,100
 ,19,100

我想要什么

" trailing space",19,100
" ",19,100

Python默认CSV编写器可以选择“QUOTE_MINIMAL”,但它不包括引用带有额外空格的字符串。在我的情况下,那些空白空间实际上是关键的,但没有引用,读者(如libre-office)如果没有引用则剥离空格。

是否有任何内置选项或快速廉价的方式来告诉作者用空格引用空字符串?

另外,“QUOTE_NONNUMERIC”引用太多。实际数据是巨大的(几百兆字节,60% - 70%的字符串)。这可能听起来很愚蠢,但我试图通过最小化报价来减少csv大小。

4 个答案:

答案 0 :(得分:2)

为什么不使用QUOTE_NONNUMERIC?这将引用所有字符串,而不仅仅是那些带空格的字符串,但它肯定会引用它们。

with open("quote.csv", "w", newline="") as fp:
    writer = csv.writer(fp, quoting=csv.QUOTE_NONNUMERIC)
    writer.writerows(data)

给了我

(3.5.1) dsm@notebook:~/coding$ cat quote.csv 
" leading space",19,100
" ",19,100

答案 1 :(得分:0)

您是否尝试过csv writer in Python with custom quoting

虽然确保你知道你在引用什么并采取手动逃避的东西

答案 2 :(得分:0)

尝试完全删除引用。将根据需要保留所有引号字符。

writer = csv.writer(csv_filename, delimiter=',', quoting=csv.QUOTE_NONE)

答案 3 :(得分:0)

这有点骇人听闻,但实现这一目标的一种方法可能是

df.to_csv(quoting=csv.QUOTE_MINIMAL, escapechar=' ')

这不是文档,但QUOTE_MINIMAL似乎引用了包含escapechar的字段,尽管它没有任何作用(因为quoting不是NONE,而doublequote是{{ 1}}默认情况下