2015-04-21 4 views
6

Ho la linea:durante la scrittura di file CSV writerow non riesce con UnicodeEncodeError

c.writerow(new_values) 

che scrive una serie di valori in un file CSV. Normalmente funziona bene, ma a volte genera un'eccezione e non scrive la riga nel file csv. Non ho idea di come posso scoprire perché.

Questa è la mia gestione delle eccezioni in questo momento:

 try: 
      c.writerow(new_values) 
     except: 
      print() 
      print ("Write Error: ", new_values) 

ho commentato la mia eccezione e si dice:

return codecs.charmap_encode(input,self.errors,encoding_table)[0] 
UnicodeEncodeError: 'charmap' codec can't encode character '\u03b1' in position 14: character maps to <undefined> 
+2

'viene generata un'eccezione 'Quale eccezione viene sollevata? – That1Guy

+0

Quello che vedi;) –

+0

Non vedo eccezioni. Vedo che stai escludendo * qualsiasi * eccezione. Si prega di aggiornare la domanda con il traceback completo. – That1Guy

risposta

0

il modulo csv in python è noto per non gestisce bene i caratteri Unicode. A meno che tutti i personaggi non rientrino nel codec ascii, probabilmente non sarai in grado di scrivere la riga. C'è un (un po ') calo nella sostituzione chiamato unicodecsv che potresti voler esaminare. https://pypi.python.org/pypi/unicodecsv

+0

Quindi non è possibile scrivere una lettera "α"/Alpha in un file csv con python? –

+0

OP sta usando Python 3 (dedotto dall'uso della funzione di stampa). Non c'è alcun problema nell'usare unicode con Python 3 csv. –

+0

Non sarei d'accordo sul fatto che questo deve essere python 3. Quelle funzioni di stampa funzionano perfettamente in python 2 - aggiungono solo parents. – bgm387

10

Ok, ho risolto da solo:

ho dovuto aggiungere "encoding = 'utf-8'" per la mia linea csv.writer:

c = csv.writer(open("Myfile.csv", 'w', newline='', encoding='utf-8')) 
+3

Non funziona per Python 2.7 – Siddharth

+0

Funziona in Python 3.4 – wolf97084