Ошибка при попытке записать текст с тегом html в файл .txt - Python - PullRequest
0 голосов
/ 10 апреля 2019

При получении следующей ошибки при попытке записать значение ключа словаря, содержащее теги HTML, в текстовый файл.

Traceback (most recent call last):
  File "/Users/jackboland/PycharmProjects/NLTK_example/JsonToTxt.py", line 11, in <module>
    data = json.load(json_data)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/__init__.py", line 293, in load
    return loads(fp.read(),
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc0 in position 10: invalid start byte

У меня есть набор файлов JSON.Я успешно извлекаю эти данные в словарь Python.Затем я идентифицирую ключ словаря, значение которого является самым длинным, и извлекаю это значение в текстовый файл.Код работает для всех файлов JSON, самое длинное значение ключа словаря которых является строкой.Выдает вышеуказанную ошибку для файлов с самым длинным значением ключа словаря в формате html.

with open(path + file) as json_data:
    data = json.load(json_data)
    for value in data.values():  # gets the value of each dictionary key
    value = str(value)  # converts the value of each dictionary key to a string enabling counting total characters
    vLength = len(value)  # calculates the length of each value in every dictionary key to enable identifying only the longest of the key values
    if vLength > 100:  # if the length of a value is over 200 characters, it prints that, this insures capturing the opinion text no matter what dictionary key it is in
    f = open(newpath + file[:-5] + ".txt", 'w+')
    f.write(value)
    f.close()

Значения ключей словаря, которые являются строками, анализируются из словаря и в текстовый файл.Только значения ключа словаря, содержащие html, не записываются в текстовый файл.

1 Ответ

0 голосов
/ 10 апреля 2019

Python пытается преобразовать байтовый массив в строку Unicode. Когда он пытается это сделать, он встречает последовательность байтов, которая не разрешена в строках с кодировкой utf-8 (здесь в 0xc0 в позиции 10).

Попробуйте прочитать файл в двоичном формате, чтобы содержимое файла оставалось в байтах.

with open(path + file, 'rb') as json_data:
     //rest of the code

Если это не работает, вручную укажите форматы кодировки.

Пример:

open(path + file, encoding="utf-8") as json_data
     //rest of the code

Вы можете получить различные форматы кодирования здесь.

https://docs.python.org/2.4/lib/standard-encodings.html

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