Heim > Artikel > Backend-Entwicklung > Wie gehe ich mit der UTF8-Codierung in Python beim Lesen von CSV-Dateien um?
CSV-Dateien, die häufig für den Datenaustausch verwendet werden, enthalten häufig Zeichen mit Akzent, die zur Wahrung ihrer Integrität eine UTF8-Codierung erfordern. Der Python-CSV-Reader unterstützt jedoch nur ASCII-Daten.
Beim Versuch, eine UTF8-CSV-Datei mit akzentuierten französischen oder spanischen Zeichen zu lesen, obwohl Code zur Verarbeitung der UTF8-Codierung verwendet wird, tritt die folgende Ausnahme auf wurde gefunden:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 68: ordinal not in range(128)
Die Lösung liegt im Verständnis des Zwecks der Kodierungsmethode. Es wandelt Unicode-Strings in Byte-Strings um, nicht umgekehrt. Durch die korrekte Verwendung des Codecs-Moduls und insbesondere von codecs.open für die Verarbeitung von UTF8-Textdateien kann der Code vereinfacht werden:
<code class="python">import csv def unicode_csv_reader(utf8_data, dialect=csv.excel, **kwargs): csv_reader = csv.reader(utf8_data, dialect=dialect, **kwargs) for row in csv_reader: yield [unicode(cell, 'utf-8') for cell in row] filename = 'da.csv' reader = unicode_csv_reader(open(filename)) for field1, field2, field3 in reader: print field1, field2, field3 </code>
Wenn die Eingabedaten nicht in UTF8 vorliegen, wie z ISO-8859-1, der Code erfordert eine Transkodierung:
<code class="python">line.decode('whateverweirdcodec').encode('utf-8')</code>
Dies ist jedoch oft unnötig, da CSV ISO-8859-*-codierte Byte-Strings direkt verarbeiten kann.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit der UTF8-Codierung in Python beim Lesen von CSV-Dateien um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!