44 votos

¿Cómo puedo leer un Word 2007 .archivo docx?

Me gustaría buscar un archivo de Word 2007 (.docx) para una cadena de texto, por ejemplo, "alguna frase especial" que podría/pudiera ser encontrado a partir de una búsqueda dentro de Word.

Hay una manera de Python para ver el texto? Yo no tengo ningún interés en formato - yo sólo quiero clasificar documentos como tener o no tener "alguna frase especial".

143voto

mikemaccana Puntos 7470

Después de leer tu post anterior, hice un 100% nativo de Python docx módulo para resolver este problema específico.

# Import the module
from docx import *

# Open the .docx file
document = opendocx('A document.docx')

# Search returns true if found    
search(document,'your search string')

La docx módulo es en https://python-docx.readthedocs.org/en/latest/

33voto

PhiLho Puntos 23458

Más exactamente, una .docx documento es un archivo Zip en formato OpenXML: en primer lugar tiene que descomprimirlo.
He descargado una muestra (de Google: algunas término de búsqueda filetype:docx) y después de descomprimir me encontré con algunas carpetas. La palabra carpeta que contiene el documento en sí mismo, en el archivo document.xml.

16voto

Tony Meyer Puntos 4700

En este ejemplo, "Curso de Outline.docx" es un documento de Word 2007, que contiene la palabra "Windows", y no contiene la frase "por azar de la cadena".

>>> import zipfile
>>> z = zipfile.ZipFile("Course Outline.docx")
>>> "Windows" in z.read("word/document.xml")
True
>>> "random other string" in z.read("word/document.xml")
False
>>> z.close()

Básicamente, sólo hay que abrir el archivo docx (que es un archivo zip) utilizando el fichero zip, y encontrar el contenido en la 'document.xml de archivo' en la 'palabra' de la carpeta. Si quería ser más sofisticado, puede, a continuación, analizar el XML, pero si usted está buscando una frase (la que sabe que no será una etiqueta), entonces usted puede mirar en el XML de la cadena.

14voto

romeok Puntos 304

Un problema con la búsqueda dentro de un documento de Word archivo XML es que el texto se puede dividir en elementos en cualquier carácter. Sin duda será dividir si el formato es diferente, por ejemplo como en el Hola Mundo. Pero puede ser dividido en cualquier punto y que es válido en el OOXML. Lo que al final se tiene que tratar con XML como este, incluso si el formato no cambia en el medio de la frase!

<w:p w:rsidR="00C07F31" w:rsidRDefault="003F6D7A">

<w:r w:rsidRPr="003F6D7A">

<w:rPr>

<w:b /> 

</w:rPr>

<w:t>Hello</w:t> 

</w:r>

<w:r>

<w:t xml:space="preserve">World.</w:t> 

</w:r>

</w:p>

Por supuesto, usted puede cargar en un árbol DOM de XML (no estoy seguro de lo que esto va a ser en Python) y pedir a obtener el texto sólo como una cadena, pero podría acabar con muchos otros "callejones sin salida", sólo porque la especificación de OOXML es de alrededor de 6.000 páginas de largo y MS Word puede escribir un montón de "cosas" que no te esperas. Por lo que podría terminar de escribir su propio procesamiento de documentos de la biblioteca.

O usted puede intentar usar Aspose.Palabras.

Se encuentra disponible .NET y Java productos. Ambos pueden ser utilizados desde Python. Uno a través de la Interoperabilidad COM otro a través de JPype. Ver Aspose.Palabras Guía De Programadores, Utilizar Aspose.Palabras en Otros Lenguajes de Programación (lo siento, no se puede publicar un segundo enlace, stackoverflow no me deja todavía).

4voto

kokos Puntos 10083

Una docx es sólo un archivo zip con un montón de archivos en su interior. Tal vez usted puede mirar algunos de los contenidos de los archivos? Aparte de eso, usted probablemente tendrá que encontrar una lib que entiende el formato de word, de modo que usted puede filtrar las cosas que usted no está interesado en.

Una segunda opción sería la interoperabilidad con la palabra y hacer la búsqueda a través de ella.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X