Чтение UTF-8 с помощью спецификации с использованием модуля Python CSV вызывает нежелательные дополнительные символы
Я пытаюсь прочитать CSV файл с Python со следующим кодом:
with open("example.txt") as f:
c = csv.reader(f)
for row in c:
print row
My example.txt
имеет только следующее содержимое:
Hello world!
Для файлов с кодировкой UTF-8 или ANSI это дает мне ожидаемый результат:
> ["Hello world!"]
Но если я сохраню файл как UTF-8 с BOM, я получаю этот вывод:
> ["\xef\xbb\xbfHello world!"]
Так как у меня нет никакого контроля над файлами, которые пользователь будет использовать в качестве ввода, я бы хотел, чтобы это работало с BOM. Как я могу исправить эту проблему? Есть ли что-то, что мне нужно сделать, чтобы убедиться, что это работает и для других кодировок?
Ответы
Ответ 1
Вы можете использовать модуль Python unicodecsv
следующим образом:
import unicodecsv
with open('input.csv', 'rb') as f_input:
csv_reader = unicodecsv.reader(f_input, encoding='utf-8-sig')
print list(csv_reader)
Итак, для входного файла, содержащего следующее в UTF-8 с спецификацией:
c1,c2,c3,c4,c5,c6,c7,c8
1,2,3,4,5,6,7,8
Это будет отображать следующее:
[[u'c1', u'c2', u'c3', u'c4', u'c5', u'c6', u'c7', u'c8'], [u'1', u'2', u'3', u'4', u'5', u'6', u'7', u'8']]
Модуль unicodecsv
можно установить с помощью pip
следующим образом:
pip install unicodecsv