J'essaie d'utiliser le module python-docx
(pip install python-docx
) Mais cela semble être très déroutant, car dans github repo test, ils utilisent la fonction opendocx
mais dans readthedocs ils utilisent la classe Document
. Même s'ils ne font que montrer comment ajouter du texte à un fichier docx ne lisant pas un fichier existant?
La première (opendocx
) ne fonctionne pas, peut être déconseillée. Pour le second cas, j'essayais d'utiliser:
from docx import Document
document = Document('test_doc.docx')
print document.paragraphs
Il a renvoyé une liste de <docx.text.Paragraph object at 0x... >
Puis j'ai fait:
for p in document.paragraphs:
print p.text
Il a renvoyé tout le texte mais il manquait peu de chose. Toutes les URL (CTRL + CLIQUER pour accéder à l'URL) n'étaient pas présentes dans le texte de la console.
Quelle est la solution? Pourquoi les URL sont manquantes?
Comment obtenir un texte complet sans parcourir la boucle (quelque chose comme open().read()
)
tu peux essayer ça
import docx
def getText(filename):
doc = docx.Document(filename)
fullText = []
for para in doc.paragraphs:
fullText.append(para.text)
return '\n'.join(fullText)
Vous pouvez utiliser python-docx2txt qui est adapté de python-docx mais peut également extraire du texte à partir de liens, d’en-têtes et de pieds de page. Il peut également extraire des images.
Sans installer python-docx
docx
est fondamentalement un fichier Zip contenant plusieurs dossiers et fichiers. Dans le lien ci-dessous, vous trouverez une fonction simple permettant d'extraire le texte du fichier docx
, sans qu'il soit nécessaire d'installer python-docx
et lxml
, ce qui pose parfois problème:
http://etienned.github.io/posts/extract-text-from-Word-docx-simply/
Il y a deux "générations" de python-docx. La génération initiale s'est terminée avec les versions 0.2.x et la "nouvelle" génération a démarré à la version 0.3.0. La nouvelle génération est une réécriture de la version héritée, orientée objet. Il a un dépôt distinct situé ici .
La fonction opendocx () fait partie de l'API héritée. La documentation concerne la nouvelle version. La version précédente n'a aucune documentation à proprement parler.
Ni la lecture ni l'écriture d'hyperliens ne sont pris en charge dans la version actuelle. Cette capacité est sur la feuille de route et le projet est en cours de développement. Cela s'avère être une API assez large, car Word a beaucoup de fonctionnalités. Nous y arriverons donc, mais probablement pas dans les prochains mois, à moins que quelqu'un décide de se concentrer sur cet aspect et de le contribuer.
vous pouvez essayer cela aussi
from docx import Document
document = Document('demo.docx')
for para in document.paragraphs:
print(para.text)
Alors que d'autres réponses montrent comment nous pouvons utiliser python-docx
, voici comment vous pouvez lire un fichier .docx
avec la fonction inbuild open
de python:
data = open(file, 'r', encoding="ISO-8859-1").read()
Vous devez spécifier encoding = "ISO-8859-1" dans les arguments. J'espère que ça aide.
En utilisant python-docx, comme le montre la réponse de @Chinmoy Panda:
for para in doc.paragraphs:
fullText.append(para.text)
Cependant, para.text
perdra le texte dans w:smarttag
(le problème github correspondant est ici: https://github.com/python-openxml/python-docx/issues/328 ), vous devez utiliser la fonction suivante à la place:
def para2text(p):
rs = p._element.xpath('.//w:t')
return u" ".join([r.text for r in rs])
J'avais un problème similaire alors j'ai trouvé une solution de contournement (supprimez les balises de lien hypertexte grâce aux expressions régulières afin qu'il ne reste plus qu'une balise de paragraphe). J'ai posté cette solution sur https://github.com/python-openxml/python-docx/issues/85 BP