【发布时间】:2012-02-27 18:18:29
【问题描述】:
我想将[1,2,'a','He said "what do you mean?"'] 之类的数据转换为 CSV 格式的字符串。
通常人们会为此使用csv.writer(),因为它处理所有疯狂的边缘情况(逗号转义、引号转义、CSV 方言等)。问题是csv.writer() 期望输出到文件对象,不是字符串。
我目前的解决方案是这个有点 hacky 的功能:
def CSV_String_Writeline(data):
class Dummy_Writer:
def write(self,instring):
self.outstring = instring.strip("\r\n")
dw = Dummy_Writer()
csv_w = csv.writer( dw )
csv_w.writerow(data)
return dw.outstring
谁能提供一个更优雅的解决方案,仍然可以很好地处理边缘情况?
编辑:这就是我最终的做法:
def csv2string(data):
si = StringIO.StringIO()
cw = csv.writer(si)
cw.writerow(data)
return si.getvalue().strip('\r\n')
【问题讨论】:
-
在 Python 3 中,
StringIO()在io库中。 -
因为 "\r" 和 "\n" 被认为是空白,你实际上可以只使用不带参数的 "strip":
return si.getvalue().strip()--除非出于某种原因你需要在结束。