Heim >Backend-Entwicklung >Python-Tutorial >Wie gehe ich mit der UTF8-Codierung in Python beim Lesen von CSV-Dateien um?

Wie gehe ich mit der UTF8-Codierung in Python beim Lesen von CSV-Dateien um?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-02 14:10:30501Durchsuche

How to Handle UTF8 Encoding in Python When Reading CSV Files?

Lesen einer UTF8-CSV-Datei mit Python

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.

Problem

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)

Lösung

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>

Hinweis

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn