Подтвердить что ты не робот

Как извлечь текст из существующего файла docx с помощью python-docx

Я пытаюсь использовать модуль python-docx (pip install python-docx) но это кажется очень запутанным, поскольку в тестовом примере github repo они используют функцию opendocx, но в readthedocs они используют класс Document. Даже они только показывают, как добавить текст в файл docx, не читающий существующий?

1-й (opendocx) не работает, может быть устаревшим. Во втором случае я пытался использовать:

from docx import Document

document = Document('test_doc.docx')

print document.paragraphs

Он вернул список <docx.text.Paragraph object at 0x... >

Тогда я сделал:

for p in document.paragraphs:
    print p.text

Он вернул весь текст, но его было мало. Все URL-адреса (CTRL + CLICK, чтобы перейти к URL-адресу) не присутствовали в тексте на консоли.

В чем проблема? Почему URL-адреса отсутствуют?

Как я могу получить полный текст без повторения цикла (что-то вроде open().read())

4b9b3361

Ответ 1

вы можете попробовать это

import docx

def getText(filename):
    doc = docx.Document(filename)
    fullText = []
    for para in doc.paragraphs:
        fullText.append(para.text)
    return '\n'.join(fullText)

Ответ 2

Вы можете использовать python-docx2txt, который адаптирован из python-docx, но также может извлекать текст из ссылок, верхних и нижних колонтитулов. Он также может извлекать изображения.

Ответ 3

Существует два "поколения" python-docx. Начальное поколение закончилось версиями 0.2.x, а "новое" поколение началось с версии 3.0. Новое поколение - это новаторская, объектно-ориентированная переработка устаревшей версии. Здесь есть отдельный репозиторий.

Функция opendocx() является частью устаревшего API. Документация предназначена для новой версии. У устаревшей версии нет документации, о которой можно было бы говорить.

В текущей версии поддержка чтения и записи гиперссылок не поддерживается. Эта возможность находится в дорожной карте, и проект находится в активном развитии. Это, оказывается, довольно широкий API, потому что Word имеет так много функциональности. Поэтому мы займемся этим, но, вероятно, не в следующем месяце, если кто-то не решит сосредоточиться на этом аспекте и внести свой вклад.

Ответ 4

вы можете попробовать это также

from docx import Document

document = Document('demo.docx')
for para in document.paragraphs:
    print(para.text)

Ответ 5

Без установки python-docx

docx - это в основном zip файл с несколькими папками и файлами внутри него. В приведенной ниже ссылке вы можете найти простую функцию для извлечения текста из файла docx без установки python-docx и lxml, которые иногда создают проблему:

http://etienned.github.io/posts/extract-text-from-word-docx-simply/

Ответ 6

У меня была аналогичная проблема, поэтому я нашел обходное решение (удалять метки гиперссылок благодаря регулярным выражениям, так что остается только тег абзаца). Я разместил это решение на https://github.com/python-openxml/python-docx/issues/85 BP