2016-08-08 15 views
0

Ich habe eine große Menge von Daten, und ich werde sie in eine CSV-Datei mit dem folgenden Code exportieren.Exportieren von Daten in eine CSV-Datei, Fehler kann nicht codieren Zeichen ' xe8'

with open ('/Users/mz/Dropbox/dis/Programming/zoloft.csv', 
      'w', newline = '') as zolo: 
     zolo = csv.writer(zolo, delimiter =',', quotechar='|') 


     rows = zip(all_rating, all_disorders, all_side_effects, 
        all_comments, all_gender, all_age, all_dosage_duration, all_date) 

     for row in rows:  
      zolo.writerow(row) 

Aber es gibt die folgende Fehlermeldung:

zolo.writerow(row) 
UnicodeEncodeError: 'ascii' codec can't encode character '\xe8' in position 179: ordinal not in range(128) 

Gibt es eine Möglichkeit, diesen Fehler in dem Code zu handhaben ich geschrieben habe? Vielen Dank !

+0

wie der Sieht jemand Namen oder Kommentar hat einen [Fremd Umlaut] (http://www.fileformat.info/info/unicode/char/e8 /index.htm) darin. –

Antwort

2

Die csv module, at present, doesn't have Unicode support, aber Ihr Datensatz enthält eindeutig Unicode-Zeichen. Was Sie also tun können, ist etwas, das der Antwort auf this question ähnlich ist, und übersetzen Sie die Unicode-Zeichen in ihre nächsten ASCII-Äquivalente (so dass Ihr Text später nicht unleserlich ist).

ich mit etwas gehen würde wie:

from unidecode import unidecode 
with open('file', 'w', newline = '') as zolo: 
    zolo = csv.writer(zolo, delimiter =',', quotechar='|') 

    rows = zip(all_rating, all_disorders, all_side_effects, 
       all_comments, all_gender, all_age, 
       all_dosage_duration, all_date) 

    for row in rows:  
     zolo.writerow(map(unidecode, row)) 
+0

danke! Es gibt immer noch den folgenden Fehler: "Datei" /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/unidecode/__init__.py ", Zeile 48, in unidecode_expect_ascii bytestring = string. encode ('ASCII') AttributeError: 'tuple' Objekt hat kein Attribut 'encode' ', können Sie mir dabei helfen? – Mary

+0

Versuchen Sie 'zolo.writerow (unidecode (str (Zeile)))' –

+0

danke!, Ich habe es versucht. Die Ausgabe ist nur eine Spalte von einigen Buchstaben (wie 'o', 'l', 'k') es scheint, dass es alle Informationen entfernt und nur einige Buchstaben behalten. – Mary