Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/48: Рейтинг темы: голосов - 48, средняя оценка - 4.63
1713 / 580 / 76
Регистрация: 10.04.2009
Сообщений: 9,336

Прочитать файл с расширением rtf

21.12.2020, 20:32. Показов 10936. Ответов 79
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
здравствуйте, использую код
Python
1
2
3
4
from pyth.plugins.rtf15.reader import Rtf15Reader
 
rtf_текст = Rtf15Reader.read(open(rtf_файл, "r"))
print("len(rtf_текст)", len(rtf_текст))
получаю ошибку
Traceback (most recent call last):
File "C:\pythonProject\main.py", line 104, in <module>
from pyth.plugins.rtf15.reader import Rtf15Reader
ModuleNotFoundError: No module named 'pyth'

что я делаю не так? спс
подзабыл "r" - это чтение, а какой параметр у изменения файла?

Добавлено через 3 часа 54 минуты
читаю инфу, правда она бородатая 2000-х годов
Перейдите к загрузкам, чтобы получить PyRTF
то есть я ещё должен что-то загрузить? ничего по сей день не изменилось?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.12.2020, 20:32
Ответы с готовыми решениями:

Прочитать rtf файл постранично
Так я читаю rtf файл using (OpenFileDialog openFile = new OpenFileDialog()) { ...

Как программно пересохранить word-овский документ в файл с расширением «.rtf»
Dim word = New Word.Application word.Documents.Open(&quot;\...\Doc1.doc&quot;) ...

Прочитать файл с расширением TDMS
в работе в программе на си нужно прочитать файл с таким расширение кто может подсказать что это за зверь никогда не встречал и как его...

79
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
03.01.2021, 16:32
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
но с ложкой дёгтя-кракозябрами
В какой кодировке файл? Или давай пример файла с одной строчкой внутри.
0
1713 / 580 / 76
Регистрация: 10.04.2009
Сообщений: 9,336
03.01.2021, 16:40  [ТС]
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
под шумок поставил двух персонажей Petrovich and pytrovich)) - 100 лет им жизни))
взлетели-сейчас там в топике отпишусь

Добавлено через 6 минут
файл в 52 посте приложен, ну тогда уж по взрослому-скрипт то должен понять что внутри и разобраться как ему читать без крякозябров
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
03.01.2021, 20:12
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
скрипт то должен понять что внутри и разобраться как ему читать без крякозябров
Не в сказке живем…

Посмотрел на внутренности rtf-файла и исходники striprtf. Наблюдения такие.

1. Кодировка указана в начале rtf-файла: \ansicpg1251, но модуль striprtf ее игнорирует.
2. Вместо текста хранятся не коды символов, а их текстовые представления в формате \'xx. Т.е. последовательности «абв» соответствуют коды cp1251 e0 e1 e2, и в файле будет записано \'e0 \'e1 \'e2. Поэтому методы encode/decode и указание кодировки при чтении файла не помогут: содержимое у нас в ascii.
3. Модуль striprtf считает, что эти коды — кодпоинты юникода, отсюда и происходят «кракозябры».

Что с этим делать-то.
Вариант раз — закостылять.
Python
1
2
3
4
5
6
7
8
from pathlib import Path
from striprtf.striprtf import rtf_to_text
 
 
content = Path('11.rtf').read_text()
text = rtf_to_text(content)
decoded = bytes(map(ord, text)).decode('cp1251')
print(decoded)
Здесь мы выполняем обратную операцию — получаем код символа и декодируем как cp1251. Недостатки костыля:
1. Сломается, если кодировка входного документа не cp1251
2. Не знаю, где еще стрельнет.

Вариант два — форкнуть и поправить библиотеку pyth3. Не смотрел. как у нее дела с кодировками. Возможно, вылезет что-нибудь еще.
Вариант три — найти другой модуль. Мне на глаза не попалось ничего интересного. Очевидно, парсить rtf-ки — не самая популярная задача.
1
1713 / 580 / 76
Регистрация: 10.04.2009
Сообщений: 9,336
03.01.2021, 20:16  [ТС]
понятно, спс
0
1713 / 580 / 76
Регистрация: 10.04.2009
Сообщений: 9,336
07.01.2021, 17:51  [ТС]
0x10, здравствуйте скрипт в посте № 63 работает без сбоев, спасибо, подскажите а как же в тексте найти текст в нижнем и верхнем индексе-начертании? спс
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
08.01.2021, 09:28
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
как же в тексте найти текст в нижнем и верхнем индексе-начертании?
Этот и другие вопросы похожи на симптомы проблемы XY.

Чтобы дать ответ на вопрос, нужно знать формат данных и конечную цель.
0
1713 / 580 / 76
Регистрация: 10.04.2009
Сообщений: 9,336
08.01.2021, 09:56  [ТС]
по ссылке-Не удается получить доступ к сайту
формат данных-ртф файлы с ресурса Консультант+
цель-автоматом выудить оттуда нужное
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
08.01.2021, 10:01
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
формат данных-ртф файлы с ресурса Консультант+
Я о формате другого уровня. Судя по остальным постам, внутри не просто текст, а структурированные данные. Вероятно, фиксированный набор столбцов с известной семантикой и типами данных. Менее вероятно — списки чего-то.
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
цель-автоматом выудить оттуда нужное
Это не ТЗ.

Да, ссылка оказалась битой. Еще раз: https://ru.qaz.wiki/wiki/XY_problem
0
1713 / 580 / 76
Регистрация: 10.04.2009
Сообщений: 9,336
08.01.2021, 10:13  [ТС]
Цитата Сообщение от 0x10 Посмотреть сообщение
Это не ТЗ.
как приятно нужно ТЗ и тебе сделают))
ну что ж приложу тогда файлы-боюсь что вопросов будет ещё больше......
https://cloud.mail.ru/public/jrgH/iVR5Rwf54

хотя нужно то только при чтении отделить в тексте найти текст в нижнем и верхнем индексе-начертании
Цитата Сообщение от 0x10 Посмотреть сообщение
формат данных-ртф файлы с ресурса Консультант+
ошибся с многих ресурсов
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
08.01.2021, 10:21
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
боюсь что вопросов будет ещё больше
Естественно. Потому что ранее предыдущие вопросы указывали на то, что внутри структурированные данные, а сейчас видно, что это не так. И да, я помню, что в одной из тем была фраза «произвольный кириллический текст», но это расходилось со всеми остальными показаниями.

Цитата Сообщение от 0x10 Посмотреть сообщение
автоматом выудить оттуда нужное
Теперь осталось понять, что «нужное» и чем оно отличается от «ненужного».

Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
текст в нижнем и верхнем индексе-начертании
При беглом ознакомлении складывается впечатление, что нужен вообще весь текст. Вот на примере файла 7. ПДД РФ&26.03.2020.rtf: что в нем нужное?
1
1713 / 580 / 76
Регистрация: 10.04.2009
Сообщений: 9,336
08.01.2021, 10:33  [ТС]
Цитата Сообщение от 0x10 Посмотреть сообщение
ранее предыдущие вопросы указывали на то, что внутри структурированные данные
всё смешалось люди, кони...
и было сказано, что файлов то два, с первым где структурированные данные - можно сказать что всё гут, если и есть вопросы-так они связанные с более лучшей читательностью и простотой кода
теперь речь про второй файл
Цитата Сообщение от 0x10 Посмотреть сообщение
Вот на примере файла 7. ПДД РФ&26.03.2020.rtf: что в нем нужное?
нужное это какой текст с нижним индексом и какой с верхним индексом, если его нет то фолс
дал так много документов, потому, что они реальные и качались из многих ресурсов, и некоторые тупо с сайта скопированы и сохранены мною в ртф руками-но для меня они кашерные, как и для почти всех в том смысле, что открыл и текст читаешь а не крякозяблы, а для кодера да-есть сучки и задоринки-крякозяблы, но не для Вас))
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
08.01.2021, 11:32
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
дал так много документов, потому, что они реальные и качались из многих ресурсов
На реальных данных видно много новых деталей.

Всего у нас 27 документов. Из них:
6 — парсятся без проблем модулем pyth
8 — не парсятся из-за ошибки в pyth
13 — не парсятся… мне лень разбираться, почему. Валится на обработке картинок.

Модуль striprtf, очевидно, не подходит, т.к. сносит все форматирование, а в этой задаче оно для нас важно.

Потенциальное решение: либо найти рабочий парсер, либо доработать один из существующих. В распарсенном документе найти текст за тегами \super и \sub. Может быть, есть утилиты/библиотеки для конвертации rtf в более человеческий формат.
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
08.01.2021, 11:36
Цитата Сообщение от 0x10 Посмотреть сообщение
Потенциальное решение
Правильное решение: разобрать документ руками.

Добавлено через 21 секунду
Мышкой ctrl+c/ctrl+v
1
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
08.01.2021, 11:39
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Правильное решение: разобрать документ руками.
Да, если задача разовая и документов меньше, скажем, 50.
1
1713 / 580 / 76
Регистрация: 10.04.2009
Сообщений: 9,336
08.01.2021, 11:55  [ТС]
легчё ворд заставить отделить тегами \super и \sub - что у меня и сделано давным давно...

Добавлено через 1 минуту
Цитата Сообщение от 0x10 Посмотреть сообщение
Всего у нас 27 документов. Из них:
6 — парсятся без проблем модулем pyth
8 — не парсятся из-за ошибки в pyth
13 — не парсятся… мне лень разбираться, почему. Валится на обработке картинок.
можете дать мне код-как это проверяли? спс
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
08.01.2021, 11:56
Так пересохрани в docx и не выноси мозг людям и лисам.
2
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
08.01.2021, 13:32
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
можете дать мне код-как это проверяли? спс
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from pathlib import Path
 
from pyth.plugins.rtf15.reader import Rtf15Reader
 
 
def main():
    docs_dir = Path('docs')
    docs_paths = docs_dir.glob('**/*.rtf')
    for doc_path in docs_paths:
        try:
            _try_parse(doc_path)
            print('Parsed ', doc_path)
        except Exception as e:
            print('Failed ', doc_path, e)
 
 
def _try_parse(doc_path: Path):
    with doc_path.open('rb') as doc_file:
        Rtf15Reader.read(doc_file)
 
 
if __name__ == '__main__':
    main()
1
1713 / 580 / 76
Регистрация: 10.04.2009
Сообщений: 9,336
16.02.2021, 14:28  [ТС]
здравствуйте, финишный код в посте 63
Цитата Сообщение от 0x10 Посмотреть сообщение
from pathlib import Path
from striprtf.striprtf import rtf_to_text
content = Path('11.rtf').read_text()
text = rtf_to_text(content)
decoded = bytes(map(ord, text)).decode('cp1251')
print(decoded)
но столкнулся в ртф имеет ссылки их не считывает, можно этот код подправить, чтобы не было проблем? спс
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
16.02.2021, 16:26
striprtf — это модуль из одной функции, достаточно простой. Интерфейса для изменения поведения не предусмотрено.

Поскольку с парсерами rtf негусто, уже можно было бы написать свой или доработать один из существующих. Вполне вероятно, в процессе вылезет множество деталей, поэтому здесь нет четкой инструкции. Нужно читать описание формата, смотреть в данные и т. д.
0
1713 / 580 / 76
Регистрация: 10.04.2009
Сообщений: 9,336
16.02.2021, 16:28  [ТС]
а подсчитать можно, что они-ссылки есть?, если есть нужно предупреждение об этом другими средствами-не Питоном, это пустяки
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.02.2021, 16:28

Как прочитать файл с расширением .tmp?
Есть большой файл с расширением .tmp, лишь он при условии своей целостности, должно быть, хранит содержимое некой презентации. Можно ли его...

Power Point не удается прочитать файл с расширением .tmp
Подскажите, если Вы не заняты и не против. Записывал на диск «с» видео рабочего стола в Power Point. Было уведомление о нехватке места на...

Как можно прочитать и изменить файл doc или rtf или exel на Perl под Linux
Как можно прочитать и изменить файл doc или rtf или exel на Perl под Linux пробувал искать какето модули не могу найти проблема в...

Открыть, прочитать, изменить файл со "своим" расширением
Как можно открыть файл, допустим файл &quot;test.dat&quot;, вывести его значение в лейбл, изменить его и сохранить? Сильнее всего интересует как...

Не удается прочитать поврежденный rtf
Собирал заметки по крупицам после последнего добавления комп вырубился, теперь не могу открыть фаил пишет что поврежден. Пробовал разные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
сукцессия 30. Фосфорный и азотный замки по "честному" закону лимитирования Либиха
anaschu 16.07.2026
Основные достижения за последние дни 1. Механизм отложенного высвобождения фосфора Добавлен специальный пул для медленного разложения меланизированных гиф ЕСМ Реализована разная скорость. . .
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2. Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её. Всё это стресс конечно. Почему?. . .
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru