Cómo extraer texto de un archivo docx existente usando python-docx

Estoy tratando de usar el módulo python-docx ( pip install python-docx ) pero parece ser muy confuso, ya que en la muestra de prueba github repo están usando la función opendocx pero en readthedocs están usando Document clase Document . ¿Incluso solo muestran cómo agregar texto a un archivo docx que no lee uno existente?

El primero ( opendocx ) no funciona, puede estar en desuso. Para el segundo caso estaba tratando de usar:

 from docx import Document document = Document('test_doc.docx') print document.paragraphs 

Devolvió una lista de

Entonces hice

 for p in document.paragraphs: print p.text 

Devolvió todo el texto pero faltaban pocas cosas. Todas las URL (CTRL + CLIC para ir a la URL) no estaban presentes en el texto de la consola.

¿Cual es el problema? ¿Por qué faltan las URL?

¿Cómo podría obtener el texto completo sin iterarlo en un bucle (algo como open().read() )

puedes probar esto

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

Puede usar python-docx2txt que está adaptado de python-docx pero también puede extraer texto de enlaces, encabezados y pies de página. También puede extraer imágenes.

Sin instalar python-docx

docx es básicamente un archivo zip con varias carpetas y archivos dentro de él. En el siguiente enlace puede encontrar una función simple para extraer el texto del archivo docx , sin necesidad de instalar python-docx y lxml que a veces crean problemas:

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

Hay dos “generaciones” de python-docx. La generación inicial terminó con las versiones 0.2.x y la generación “nueva” comenzó en v0.3.0. La nueva generación es una nueva versión de la versión anterior, orientada a objetos. Tiene un repository distinto ubicado aquí .

La función opendocx () es parte de la API heredada. La documentación es para la nueva versión. La versión heredada no tiene documentación de que hablar.

Ni la lectura ni la escritura de hipervínculos son compatibles con la versión actual. Esa capacidad está en la hoja de ruta, y el proyecto está en desarrollo activo. Resulta ser una API bastante amplia porque Word tiene mucha funcionalidad. Así que lo lograremos, pero probablemente no en el próximo mes a menos que alguien decida enfocarse en ese aspecto y contribuir.

puedes probar esto tambien

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

Tuve un problema similar, así que encontré una solución alternativa (elimine las tags de hipervínculo gracias a las expresiones regulares para que solo quede una etiqueta de párrafo). Publiqué esta solución en https://github.com/python-openxml/python-docx/issues/85 BP

Usando python-docx, como muestra la respuesta de @Chinmoy Panda:

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

Sin embargo, para.text perderá el texto en w:smarttag (el problema de github correspondiente está aquí: https://github.com/python-openxml/python-docx/issues/328 ), debe utilizar la siguiente función:

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

Mientras que otras respuestas muestran cómo podemos usar python-docx , aquí le mostramos cómo puede leer un archivo .docx con la función de open incorporada de python:

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

Debe especificar encoding = “ISO-8859-1” en los argumentos. Espero eso ayude.