UnicodeDecodeError с обработкой csv

Внезапно "UnicodeDecodeError" возникает в моем коде, который работал вчера.

Файл "D: Anaconda lib site-packages IPython core interactiveshell.py", строка 3284, в run_code self.showtraceback (running_compiled_code = True)

Файл "D: Anaconda lib site-packages IPython core interactiveshell.py", строка 2021, в значении showtraceback, tb, tb_offset = tb_offset)

Файл "D: Anaconda lib site-packages IPython core ultratb.py", строка 1379, в собственной структуре structd_traceback, etype, value, tb, tb_offset, number_of_lines_of_context)

Файл "D: Anaconda lib site-packages IPython core ultratb.py", строка 1291, в structd_traceback elist = self._extract_tb (tb)

Файл "D: Anaconda lib site-packages IPython core ultratb.py", строка 1272, в _extract_tb возвращает traceback.extract_tb (tb)

Файл "D: Anaconda lib traceback.py", строка 72, в extract_tb возвращает StackSummary.extract (walk_tb (tb), limit = limit)

Файл "D: Anaconda lib traceback.py", строка 364, в экстракте f.line

Файл "D: Anaconda lib traceback.py", строка 286, строка self._line = linecache.getline (self.filename, self.lineno) .strip ()

Файл "D: Anaconda lib linecache.py", строка 16, в строках getline = getlines (имя файла, module_globals)

Файл "D: Anaconda lib linecache.py", строка 47, в getlines возвращает updatecache (имя файла, module_globals)

Файл "D: Anaconda lib linecache.py", строка 137, в строках updatecache lines = fp.readlines ()

Файл "D: Anaconda lib codecs.py", строка 321, в декодировании (результат, используется) = self._buffer_decode (data, self.errors, final)

UnicodeDecodeError: кодек «utf-8» не может декодировать байт 0xf6 в позиции 2441: недопустимый начальный байт

import csv
import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)

dateiname_TDM = "./TDM_example_small.csv" 
dateiname_corpus = "./Topic_Modeling/Input_Data/corpus.mm" 
dateiname_dictionary = "./Topic_Modeling/Input_Data/dictionary.dict"

ids = {}
corpus = []

with open(dateiname_TDM, newline='') as csvfile:
    reader = csv.reader(csvfile, delimiter='', quotechar='|') 
    documente = next(reader, None)[1:]
    for rownumber, row in enumerate(reader): 
        for index, field in enumerate(row):
            if index == 0:
                if rownumber > 0:
                    ids[rownumber-1] = field 
            else:
                if rownumber == 0:
                    corpus.append([])
                else:
                    try:
                        if field > 0:
                            corpus[index-1].append((rownumber-1, int(field)))
                    except ValueError:
                        corpus[index-1].append((rownumber-1, 0))

Всего 1 ответ


Не видя, что находится в позиции 2441, я не совсем уверен, но это, вероятно, одно из следующего:

  • Специальный, не ascii / расширенный ascii символ, в этом случае используйте the_string.encode("UTF-8") или при открытии сделайте encoding = "UTF-8" в open функции
  • У вас где-то есть u или U и это делает следующие символы читаемыми как часть последовательности Unicode, поэтому сделайте repr(the_string) чтобы добавить обратные repr(the_string) чтобы обнулить обратные repr(the_string) после (вероятно, не этого)
  • Вы читаете bytes объект, а не объект str . Попробуйте открыть его с помощью r+b (чтение и запись, байты) в функции open

Я более или менее бросил спагетти в стену, но я надеюсь, что это поможет!


Есть идеи?

10000