在Python中将数组转为CSV/TSV格式字符串
Python 提供了 csv.DictWriter 这个工具,可以把 CSV 格式的数据输出到文件中。那有没有简单的方法可以把 CSV 输出到字符串或者直接输出到屏幕上呢?
比如,给你一个这样的二维数组:
[["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 就不行。从我快速浏览的 CSV 的维基百科页面来看,似乎 Mathematica 是错的。)
一种方法是先用 csv.DictWriter 写入一个临时文件,然后再用 csv.DictReader 读取回来。那有没有更好的方法呢?
使用 TSV 而不是 CSV
我突然想到,其实我并不一定要用 CSV。使用 TSV(制表符分隔值)可以解决很多关于分隔符和引号的问题:只需要把二维数组中的制表符替换成空格,然后在中间加上制表符和换行符就可以了。为了让未来的搜索者更方便,我们可以在答案中同时提供 TSV 和 CSV 的解决方案。
1 个回答
5
我们用StringIO来处理这个问题。
myFakeFile = StringIO.StringIO()
wtr = csv.DictWriter( myFakeFile, headings )
...
myFakeFile.getvalue()
一般来说,这样做是有效的。