Мне нужно прочитать содержимое файла csv с помощью Python. Однако, когда я запускаю этот код:Как решить проблему с кодировкой?
with(open(self.path, 'r')) as csv_file:
csv_reader = csv.reader(csv_file, dialect=csv.excel, delimiter=';')
self.data = [[cell for cell in row] for row in csv_reader]
Я получаю эту ошибку:
File "C:\Python36\lib\encodings\cp1252.py", line 23, in decode return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 1137: character maps to <undefined>
Я понимаю, что этот файл не был закодирован в ф-1252, и что мне нужно, чтобы выяснить, какая кодировка была используемый. Я попробовал кучу вещей, но теперь ничего не получилось.
О файле:
- Он отправляется внешней компанией, я не могу иметь больше информации о нем.
- Он поставляется с другими подобными файлами, с которыми у меня нет какого-либо вопроса, когда я запускаю тот же код
- имеет расширение .xls, но больше файла CSV разделители точки с запятой
- Когда я открываю он с Excel открывается в режиме совместимости. Но я не вижу никакой проблемы с кодировкой: все отображается правильно.
Я уже пробовал:
- Сохранение под другим форматом файла, чтобы избавиться от режима совместимости
Добавление кодировки в первой строке моего кода: (I пытались более или менее случайно некоторые кодировки, которые я знаю)
с открытой ((self.path, 'R', кодирование = 'utf8')) как csv_file:
Скопируйте содержимое файла в новый файл или удалите все содержимое файла. Все еще не работает. Это действительно вызывает ошибку, потому что я чувствую, что это означает, что проблема не в содержимом файла, а не в самом файле.
- Поиск по всему миру, как решить эту проблему.
Вы можете попробовать прочитать файл, используя 'pandas' или' openpyxl'. –
Python 2 или Python 3? (Может быть актуальным). – nigel222
Если он открывается прямо в Excel, попробуйте сохранить Excel из другого CSV-файла. Это может привести к устранению проблем с кодировкой без необходимости выяснять, что именно не так. Или это может не ... – nigel222