Voglio trasmettere dati come [1,2,'a','He said "what do you mean?"']
una stringa in formato CSV.
Normalmente si userebbe csv.writer()
per questo, perché gestisce tutti i casi limite pazzi (escape di virgole, escape di virgolette, dialetti CSV, ecc.) Il problema è che si csv.writer()
aspetta l'output su un oggetto file, non su una stringa.
La mia soluzione attuale è questa funzione un po 'hacker:
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
Qualcuno può dare una soluzione più elegante che gestisca ancora bene i casi limite?
Modifica: ecco come ho finito per farlo:
def csv2string(data):
si = StringIO.StringIO()
cw = csv.writer(si)
cw.writerow(data)
return si.getvalue().strip('\r\n')
StringIO()
è nellaio
libreria.