Я очень долго гуглил этот вопрос. И ничего не помогало.
Суть в том, что напрямую RTF в текст на Linux в python'е перевести нельзя.
Точнее можно, если он содержит только английский текст.
А вот с русским большие проблемы. Но есть лайф-хак.
Как я уже сказал, если попробовать
import textract
import pypandoc
pathname = '<path to file>'
text1 = textract.process(pathname).decode('utf-8')
text2 = pypandoc.convert_file(pathname, 'plain')
то text 1 будет содержать некоторую служебную информацию из файла,
а text2 -- различные вариации кривых символов вместо нужных.
С pandoc всё глухо -- он вещь в себе.
А вот textract работает через unrtf, который в последних версиях (я пробовал на 0.21.10) умеет в кириллицу. Но с оговорками: если попробовать конвертировать сразу в текст, вы получите пустоту. Нужно сначала конвертировать в html:
import pypandoc
import textract
import os
pathname = '<path to file>'
os.system(f'unrtf --html {pathname} > {pathname}.html')
pathname += '.html'
text1 = text = textract.process(pathname).decode('utf-8')
text2 = pypandoc.convert_file(pathname, 'plain')
Вот теперь всё правильно. Одно плохо: нельзя всё сделать, оставаясь только в python'е.
Приходится вызывать shell. Но зато в текущей рабочей директории будут появляться вложенные картинки в формате имён pict[NNN].[ext]. Дело в том, что unrtf выводит текст или html в стандартный вывод, а файлы, соответственно в текущую директорию.
Параметра с выводом файла у него нет.
Главной загадкой в этом вопросе для меня остаётся, почему
unrtf --html file.rtf > file.html
получает текст, а
unrtf --text file.rtf > file.txt
нет.
Но решение всё равно остаётся кросс-платформенным и компактным (чего не скажешь о варианте с lowriter из Libre Office), так как в pip есть и textract и unrtf (для установки которого на windows вам потребуется 2015 студия на win7, либо свежая на win10...).