在Python中将数组转换为CSV / TSV格式的字符串

时间:2010-05-04 20:38:07

标签: python string text csv

Python提供csv.DictWriter用于将CSV输出到文件。 将CSV输出到字符串或stdout的最简单方法是什么?

例如,给定像这样的2D数组:

[["a b c", "1,2,3"],
 ["i \"comma-heart\" you", "i \",heart\" u, too"]]

返回以下字符串:

"a b c, \"1, 2, 3\"\n\"i \"\"comma-heart\"\" you\", \"i \"\",heart\"\" u, too\""

打印时看起来像这样:

a b c, "1,2,3"
"i ""heart"" you", "i "",heart"" u, too"

(我正在使用csv.DictWriter的话,这实际上是将该数组输出为CSV的规范方式.Excel会以这种方式正确解析它,尽管Mathematica没有。从快速查看{{ 3}}似乎Mathematica是错误的。)

一种方法是使用csv.DictWriter写入临时文件,然后使用csv.DictReader读回。 什么是更好的方式?

TSV而不是CSV

我也发现我并不喜欢CSV。 TSV会因分隔符而引发很多令人头疼的问题并且报价会消失: 只需在2D数组的条目中用空格替换制表符,然后只是穿插制表符和换行符就完成了。 让我们在答案中包含TSV和CSV的解决方案,以使其对未来的搜索者尽可能有用。

1 个答案:

答案 0 :(得分:5)

我们将StringIO用于此

myFakeFile = StringIO.StringIO()
wtr = csv.DictWriter( myFakeFile, headings )
...
myFakeFile.getvalue()

通常有效。