it-swarm.com.de

So extrahieren Sie Text aus einer vorhandenen docx-Datei mit python-docx

Ich versuche, python-docx module (pip install python-docx) Zu verwenden, aber es scheint sehr verwirrend zu sein, da sie in github repo test sample opendocx - Funktion verwenden, aber in readthedocs sie verwenden Document - Klasse. Sogar sie zeigen nur, wie man Text in eine docx-Datei einfügt, ohne den vorhandenen zu lesen?

Der erste (opendocx) funktioniert nicht und ist möglicherweise veraltet. Für den zweiten Fall habe ich versucht zu verwenden:

from docx import Document

document = Document('test_doc.docx')

print document.paragraphs

Es wurde eine Liste von <docx.text.Paragraph object at 0x... > zurückgegeben. 

Dann tat ich:

for p in document.paragraphs:
    print p.text

Es gab den gesamten Text zurück, aber es fehlte wenig. Alle URLs (STRG + KLICK zum Aufrufen der URL) waren im Text der Konsole nicht vorhanden.

Was ist das Problem? Warum fehlen URLs?

Wie könnte ich vollständigen Text erhalten, ohne die Schleife zu durchlaufen (etwas wie open().read())? 

28
Nancy

sie können es versuchen

import docx

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

Sie können python-docx2txt verwenden, das von python-docx angepasst wurde, aber auch Text aus Links, Kopf- und Fußzeilen extrahieren kann. Es kann auch Bilder extrahieren. 

8
Ankush Shah

Ohne Installation von python-docx

docx ist im Grunde eine Zip-Datei mit mehreren Ordnern und Dateien. In dem Link unten finden Sie eine einfache Funktion, um den Text aus der docx-Datei zu extrahieren, ohne python-docx und lxml installieren zu müssen, was manchmal zu Problemen führt:

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

6
imanzabet

Es gibt zwei "Generationen" von Python-Docx. Die anfängliche Generation endete mit den 0.2.x-Versionen und die "neue" Generation startete mit v0.3.0. Die neue Generation ist eine grundsätzliche, objektorientierte Neufassung der älteren Version. Es hat ein eigenes Repository hier .

Die Funktion opendocx () ist Teil der älteren API. Die Dokumentation bezieht sich auf die neue Version. Die ältere Version hat keine Dokumentation, von der man sprechen kann.

In der aktuellen Version werden weder Lesen noch Schreiben von Hyperlinks unterstützt. Diese Fähigkeit steht auf der Roadmap, und das Projekt wird aktiv weiterentwickelt. Es stellt sich heraus, dass es eine recht breite API ist, da Word so viele Funktionen bietet. Wir werden uns darum kümmern, aber wahrscheinlich nicht im nächsten Monat, es sei denn jemand beschließt, sich auf diesen Aspekt zu konzentrieren und ihn beizutragen.

4
scanny

sie können dies auch versuchen

from docx import Document

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

Während andere Antworten zeigen, wie wir python-docx verwenden können, lesen Sie eine .docx-Datei mit der Inbuild-Funktion open von python:

data = open(file, 'r', encoding="ISO-8859-1").read()

Sie müssen in den Argumenten encoding = "ISO-8859-1" angeben. Ich hoffe es hilft.

0

Bei Verwendung von python-docx zeigt @Chinmoy Pandas Antwort: 

for para in doc.paragraphs:
    fullText.append(para.text)

para.text geht jedoch den Text in w:smarttag verloren (entsprechendes Problem mit github ist hier: https://github.com/python-openxml/python-docx/issues/328 ).

def para2text(p):
    rs = p._element.xpath('.//w:t')
    return u" ".join([r.text for r in rs])
0
Xing Shi

Ich hatte ein ähnliches Problem, also fand ich eine Problemumgehung (entfernen Sie Hyperlink-Tags dank regulärer Ausdrücke, sodass nur ein Absatz-Tag verbleibt). Ich habe diese Lösung auf https://github.com/python-openxml/python-docx/issues/85 BP veröffentlicht

0
user4264327