我想将像[1, 2, 'a', 'He said "what do you mean?"']
这样的数据转换为CSV格式的字符串。
通常情况下,人们会使用csv.writer()
来处理这个问题,因为它可以处理所有疯狂的边缘情况(逗号转义、引号转义、CSV方言等)。但问题在于csv.writer()
期望输出到一个文件对象,而不是一个字符串。
我的当前解决方案是这个有点巧妙的函数:
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')
StringIO()
位于io
库中。 - Aristidereturn si.getvalue().strip()
——除非出于某种原因需要保留末尾的空格。 - MTKnife