Страницы

Поиск по вопросам

понедельник, 25 февраля 2019 г.

Прочитать кириллицу с rtf-файла Python 3

Столкнулся с проблемой на python3 - прочитать из файла текст на кириллице (rtf, txt фаил). Выводит в терминал непонятные значения типа u/2424 и тд. Перепробовал все, не могу понять как перекодировать его чтобы выводил нормально. И как прочитать из файла одно слово? Спасибо за ответ! Так же открывал таким методом. Вывод не меняется!
open('...', 'r', encoding='utf-8')
file = open('some_text.rtf', 'r') print(file.readlines())
Вот такой вывод кирилицы:
['\xd0\x92\xd0\xb0\xd1\x88 \xd1\x88\xd0\xb5\xd0\xb4\xd0\xb5\xd0\xb2\xd1\x80 \xd0\xb3\xd0\xbe\xd1\x82\xd0\xbe\xd0\xb2!
', '\xd0\xa1 \xd0\xb4\xd1\x80\xd1\x83\xd0\xb3\xd0\xbe\xd0\xb9


Ответ

RTF - не plain-text файл и просто так из него ничего прочитать не выйдет. В нем дополнительно хранятся таблицы шрифтов, цветов, стилей и еще неведомо чего. Более того, судя по всему текст там хранится не в виде байтов u/1234, а в виде строк 'u/1234' (!) (или для другой подходящей кодировки, например, win-1251 - в этом случае кирилица представлена строками типа \'b2, \'a4). Благо, есть парочка старых библиотек. Вот пример для pyth (для простого файла с одной строкой сработало):
from pyth.plugins.rtf15.reader import Rtf15Reader
doc = Rtf15Reader.read(open("doc.rtf", "r"))
for paragraph in doc.content: for word in paragraph.content: print(word.__dict__["content"]) # Вывод в виде unicode строки
С документацией плоховато и неизвестно как именно библиотека справляется с таблицами, изображениями.

Комментариев нет:

Отправить комментарий