Прежде всего, я нашел следующее , которое в основном совпадает с моим вопросом, но оно закрыто, и я не уверен, что понимаю причину закрытия по сравнению с содержанием поста. Я тоже не вижу рабочего ответа.
У меня более 20 входных файлов из 4 приложений. Все файлы экспортируются как файлы .csv. Первые 19 файлов работали (4 других экспортированы из того же приложения), а затем я столкнулся с файлом, который выдает мне эту ошибку:
UnicodeDecodeError: 'charmap' codec can't decode byte 0x8f in position 5762: character maps to <undefined>
Если я посмотрел это правильно, то это & lt ctrl & gt. Код ниже - соответствующие строки:
with open(file, newline = '') as f:
reader = csv.DictReader(f, dialect = 'excel')
for line in reader:
Я знаю, что собираюсь получить файл. Я знаю, что это будет .csv. Могут быть некоторые различия в том, что я получаю из-за ручной генерации / экспорта исходных файлов. В некоторых файлах также могут быть странные символы (например, японский, русский и т. Д.). Я предоставляю эту информацию, потому что, возвращаясь к источнику, чтобы получить другой файл, можно просто выбросить банку из строя, пока мне не придется получать обновленные данные (или, что еще хуже, кто-то другой).
Так что вопрос, вероятно, состоит из нескольких частей:
1) Есть ли способ сказать csv.DictReader игнорировать неопределенные символы? (Подсказка для кодека: если я его не вижу, он не имеет для меня значения.)
2) Что мне делать, если у меня есть «сумасшедшие» персонажи? Я подумал об открытии каждого ввода в виде двоичного файла, отфильтровывая поврежденные шестнадцатеричные символы, записывая файл обратно на диск, а затем открывая новый файл, но для программы это требует больших затрат и даже больше для меня. Это также несколько заявлений JCL о том, что я снова в 1977 году.
3) Как выяснить, что я получаю в качестве входных данных, если он падает, когда я читаю это.
4) Я выбрал "диалект =" Excel ""; потому что многие входные данные представляют собой файлы Excel, которые можно загрузить из одного из исходных приложений. Из документов на dictreader у меня сложилось впечатление, что это просто определяет разделитель, символ кавычки и символы EOL, которые можно ожидать / использовать. Поэтому я не думаю, что это моя проблема, но я тоже нуб-питон, так что я не уверен на 100%.