Quiero transmitir datos como [1,2,'a','He said "what do you mean?"']en una cadena con formato CSV.
Normalmente uno lo usaría csv.writer()para esto, porque maneja todos los casos extremos locos (escape de comas, escape de comillas, dialectos CSV, etc.) El problema es que csv.writer()espera generar una salida a un objeto de archivo, no a una cadena.
Mi solución actual es esta función algo 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
¿Alguien puede ofrecer una solución más elegante que aún maneje bien los casos extremos?
Editar: Así es como terminé haciéndolo:
def csv2string(data):
si = StringIO.StringIO()
cw = csv.writer(si)
cw.writerow(data)
return si.getvalue().strip('\r\n')
StringIO()está en laiobiblioteca.