2016-05-30 2 views
3

У меня есть файл csv, сохраненный в кодировке UTF-8.Какая кодировка используется csv.DictReader при чтении csv?

Он содержит символы не-ascii [умлауты].

Я читаю этот файл с помощью:

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

Мои вопросы:

  1. В котором кодирование файл время чтения?
  2. я заметил, что для того, чтобы обратиться к струнам, как UTF-8 мне нужно выполнить:

    str.decode('utf-8') 
    

    Есть ли лучший подход, то при чтении файла в одной кодировке, а затем преобразовать в другую, т.е. utf-8?

[версия Python: 2,7]

+0

Этот ответ решил мою проблему: https://stackoverflow.com/questions/5004687/python-csv-dictreader-with-utf-8-data – ThomasW

ответ

1

Как об использовании экземпляров и классов для того, чтобы достичь этого?

Вы можете хранить общий словарь на уровне класса, а также загружать текстовые файлы Unicode и даже обнаруживать их кодировку с использованием или без использования масок файла спецификации.

Давным-давно я написал простую библиотеку, которая переопределяет значение по умолчанию open() тем, что известно в Unicode.

Если вы делаете import tendo.unicode, вы сможете изменить способ загрузки файлов csv.

Если в ваших файлах нет заголовка спецификации, библиотека будет использовать UTF-8 вместо старого ascii. Вы даже можете указать другую резервную кодировку, если хотите.

1

В Python 2.7 CSV-модуль не применяет никакого декодирования - он открывает файл в двоичном режиме и возвращает строки байтов.

Используйте https://github.com/jdunck/python-unicodecsv, который декодирует на лету.

Используйте это нравится:

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

r будет содержать Dict из юникоды. Важно, чтобы исходный файл был открыт как binary.

Смежные вопросы