2016-08-17 5 views
-4

Dateiexport funktioniert gut, aber ich habe ein Problem mit der Codierung von Daten. Wo habe ich Fehler gemacht?Django Codierung Probleme mit CSV

Mein Code ist

for user in users: 
    result = user[0].encode('utf-8') 
    for x in filter(lambda q: q is not None, user): 
     result += ', ' 
     if type(x) in (str, unicode): 
      result += x.encode('utf-8') 
     else: 
      result += str(x) 
     print type(result), result 
    writer.writerow(result) 

return response 
+1

Was genau ist Ihr Problem? Erhalten Sie eine Fehlermeldung? – user2393256

+0

Definieren Sie "Ich habe ein Problem." Haben Sie einen Fehler/Traceback erhalten? Zeig es. CSV ist berüchtigt dafür, Unicode in der Python 2-Bibliothek nicht gut zu handhaben, so viele benutzen "unicodecsv". Verwenden Sie Python 2 oder 3? Nicht genug Informationen hier, um Ihnen zu helfen .... – Dan

+0

Nein, ich habe ein Problem in der exportierten Datei. Ich verwende Python 2.7 nun Daten in der Datei sieht aus wie Имя \t Фамилия \t Комментарий \t Дата контракта \t \t \t \t \t \t – tonyjasta

Antwort

0

Die .encode Methode auf eine Unicode-Zeichenfolge angewendet wird ein Byte-String zu machen; Wenn Ihre CSV-Daten NICHT in utf-8 gespeichert sind und stattdessen in latitude-1 codiert sind, benötigen Sie eine "Transcodierung". So etwas wie das:

line.decode('latin-1').encode('utf-8') 

Wenn Sie Ihre CSV-Codierung kennen, dann ersetzen Sie Latin-1 durch was auch immer Ihre Eingabedatencodierung ist.

Auch, wenn Sie nicht sicher sind, was die Codierung der CSV-Datei wird dann können Sie prüfen wollen chardet verwenden und Sie können lernen, wie es zu benutzen, bei readthedocs

+0

I verwendet 'writer.writerow ([x.encode ('utf-8') für x im Filter (Lambda q: q ist nicht None, Benutzer)]) ' aber diese Methode funktioniert nicht für alle Werte – tonyjasta