UnicodeDecodeError с обработкой csv - PullRequest
0 голосов
/ 15 мая 2019

Внезапно "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 self, 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 =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 Ответ

0 голосов
/ 15 мая 2019

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...