2016-05-30 14 views
3

Ich habe eine CSV-Datei gespeichert als UTF-8 codiert.Welche Codierung wird von CSV.DictReader beim Lesen von CSV verwendet?

Es enthält Nicht-Ascii-Zeichen [Umlaute].

Ich lese die Datei mit:

csv.DictReader(<file>,delimiter=<delimiter>). 

Meine Fragen sind:

  1. In welcher Codierung wird die Datei gelesen werden?
  2. ich bemerkt, um die Saiten als utf-8 beziehen muss ich ausführen, dass:

    str.decode('utf-8') 
    

    Gibt es einen besseren Ansatz dann die Datei in einer Codierung zu lesen und dann in ein anderes konvertieren, dh utf-8?

[Python-Version: 2.7]

+0

Diese Antwort löste mein Problem: https://stackoverflow.com/questions/5004687/python-csv-dictreader-with-utf-8-data – ThomasW

Antwort

1

Wie über Instanzen und Klassen, um mit diesem zu erreichen?

Sie können das gemeinsam genutzte Wörterbuch auf Klassenebene speichern und auch Unicode-Textdateien laden und sogar deren Codierung mit oder ohne Verwendung von BOM-Dateimasken erkennen.

Vor langer Zeit schrieb ich eine einfache Bibliothek, die den Standard open() mit einem Unicode-bewusst überschreibt.

Wenn Sie import tendo.unicode tun, können Sie ändern, wie die CSV-Bibliothek die Dateien lädt.

Wenn Ihre Dateien keinen Stücklistenkopf haben, wird die Bibliothek UTF-8 statt der alten ascii annehmen. Sie können sogar eine andere Fallback-Codierung angeben, wenn Sie möchten.

1

In Python 2.7 wendet das CSV-Modul keine Decodierung an - es öffnet die Datei im Binärmodus und gibt Bytestrings zurück.

Verwenden Sie https://github.com/jdunck/python-unicodecsv, die im laufenden Betrieb dekodiert.

Verwenden Sie es mögen:

with open("myfile.csv", 'rb') as my_file:  
    r = unicodecsv.DictReader(my_file, encoding='utf-8') 

r ein dict von Unicodes enthalten wird. Es ist wichtig, dass die Quelldatei als binary-Modus geöffnet wird.

Verwandte Themen