2017-11-21 3 views
0

Ich arbeite an Beispielen aus dem Buch Streiten mit Python.'dict' Objekt hat kein Attribut 'decode'

Der Versuch, Daten aus einer CSV-Datei in ein dictReader-Objekt namens header_rdr zu lesen.

header_rdr = DictReader(open('/Users/tcssig/Downloads/data-wrangling-master/data/unicef/mn_headers.csv', 'r')) 

Wenn ich Liste Verständnis versuchen, alle dict Werte in einer Liste zu lesen, bekomme ich

header_rows = [h.decode('utf-32') for h in header_rdr] 

Fehlermeldung verwendet, ist: 'dict' object has no attribute 'decode'.

Wie kann ich vorgehen, ohne die Zeichenfolge Decodierung vor der Übergabe in eine Zeichenfolge.

Auch ohne die Elemente Decodierung, bekam ich den Fehler:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 2807: ordinal not in range(128)

+0

'DictReader' liefert ein OrderedDict für jede Zeile der CSV. Aber Sie sollten die Datei mit dem richtigen Verschlüsselungsmodus öffnen. Du benutzt Python 2 nicht, oder? –

+0

Ich benutze Python 3 und öffne die Datei im Standard-Lese-Text-Modus. Was soll ich machen ? – Sarang

+3

Übergeben Sie das Argument 'encoding = 'utf-32'' im Aufruf'' open'' (https://docs.python.org/3/library/functions.html#open). –

Antwort

0

Auf Iteration ein csv.DictReader ergibt dict s - daher der Name.
Jedes Dict stellt einen CSV-Datensatz im Format {<column_header>: <column_value>} dar. Um die Inhalte der Datei als UTF-32 zu dekodieren, können Sie die Kodierung als Argument von open angeben.

header_rdr = DictReader(open(…, 'r', encoding='utf-32')) 
Verwandte Themen