2016-08-03 5 views
1

So habe ich diese csv, die Zeilen wie diese hat:Encoding csv-Dateien beim Öffnen mit Python

"41975","IT","Catania","2016-01-12T10:57:50+01:00",409.58 
"538352","DE","Düsseldorf","2015-12-18T20:50:21+01:00",95.03 
"V22211","GB","Nottingham","2015-12-31T11:17:59+00:00",872 

Im aktuellen Beispiel das erste und das dritte Wort arbeiten gut, aber das Programm stürzt ab, wenn es Düsseldorf druckt, die ü ist problematisch

Ich möchte in der Lage sein, die Informationen aus dieser CSV-Datei zu bekommen und print es zu können. Hier ist mein Code:

def load_sales(file_name): 
    SALES_ID = 0 
    SALES_COUNTRY = 1 
    SALES_CITY = 2 
    SALES_DATE = 3 
    SALES_PRICE =4 
    with open(file_name, 'r', newline='', encoding='utf8') as r: 
     reader = csv.reader(r) 
     result=[] 
     for row in reader: 
      sale={} 
      sale["id"]=row[SALES_ID] 
      sale["country"]=row[SALES_COUNTRY] 
      sale["city"]=row[SALES_CITY] 
      sale["date"]=row[SALES_DATE] 
      sale["price"]=float(row[SALES_PRICE]) 
      result.append(sale) 

wenn ich drucke drucke ich die result erhalte ich:

File "C:\Anaconda3\lib\encodings\cp866.py", line 19, in encode             
    return codecs.charmap_encode(input,self.errors,encoding_map)[0]             
UnicodeEncodeError: 'charmap' codec can't encode character '\xfc' in position 384: character maps to <undefined> 

Bisher habe ich versucht: Ändern der encoding Wert in der Öffnungsfunktion mit utf-8, UTF8 usw., Erstellen einer Druckfunktion:

def write_uft8(data): 
    print(data).encode('utf-8') 

Aber das ist kein praktikabler Weg, wenn Sie Liste der Wörterbücher ausdrucken müssen.

Jemand sagte mir, dass das Problem ist, dass mein Python nicht eingestellt ist, um diese Nachrichten zu utf-8 zu verschlüsseln, ist das wahr und wie ändere ich es?

+0

Dies aufgrund der Codierung der Eingabedatei/Daten auftreten können. Sind Sie sicher, dass die Daten als "utf-8" angegeben sind? Außerdem finden Sie hier eine vollständige Liste aller Kodierungen: https://docs.python.org/3.5/library/codecs.html#standard-encodings Ich würde vorschlagen, 'iso-8859-1' zu versuchen oder' 'zu verwenden Chardet-Modul, um die Dateicodierung automatisch zu erkennen. – albert

+0

im Beispielsatz, Probleme auftreten nur in dem Wort Düsseldorf in der ü, alles andere ist in Ordnung –

+1

Ihr Problem ist die Windows-cmd Sie den Code ausführen, nicht wegen Python –

Antwort

0

Das Problem hier ist, dass wenn Python in einen Stream schreibt, versucht, Text in einer Weise zu schreiben, die mit der Codierung oder dem Zeichensatz dieses Streams kompatibel ist.

In diesem Fall scheint es, dass Sie den Befehl in einer Windows-Konsole ausführen, die auf kyrillischen Text (CP866) eingestellt ist. Die kyrillische Codepage enthält kein entsprechendes Zeichen für ü und daher kann die Zeichenfolge nicht in ein entsprechendes Zeichen für die Ausgabe decodiert werden.

Ändern der aktiven Codepage des Windows-cmd-Konsole utf-8 helfen sollte:

$ CHCP 65001