Leer y escribir archivos de MS Word en Python a través del módulo Python-Docx

El artículo explica cómo leer y escribir archivos de MS Word con el módulo Python-Docx con la ayuda de varios ejemplos.

La utilidad MS Word de la suite Microsoft Office es una de las herramientas más utilizadas para escribir documentos de texto, tanto simples como complejos. Aunque los humanos pueden leer y escribir fácilmente documentos de MS Word, suponiendo que tenga instalado el software de Office, muchas veces necesitará leer el texto de los documentos de Word dentro de otra aplicación.

Por ejemplo, si está desarrollando una aplicación de procesamiento natural del lenguaje en Python que toma archivos de MS Word como entrada, necesitará leer MS Word archivos en Python antes de poder procesar el texto. Del mismo modo, muchas veces necesita escribir texto en documentos de MS Word como salida, que podría ser un informe generado dinámicamente para descargar, por ejemplo.

En este artículo, verá cómo leer y escribir archivos de MS Word en Python.

Instalación de la biblioteca Python-Docx

Existen varias bibliotecas que se pueden usar para leer y escribir archivos de MS Word en Python. Sin embargo, usaremos el módulo python-docx debido a su facilidad de uso. Ejecute el siguiente comando pip en su terminal para descargar el módulo python-docx como se muestra a continuación:

1
$ pip install python-docx

Leer archivos de MS Word con el módulo Python-Docx

En esta sección, verá cómo leer texto de archivos de MS Word a través del módulo python-docx.

Cree un nuevo archivo de MS Word y cámbiele el nombre a "my_word_file.docx". Guardé el archivo en la raíz de mi directorio "E", aunque puede guardar el archivo en cualquier lugar que desee. El archivo my_word_file.docx debe tener el siguiente contenido:

reading ms word files in python

Para leer el archivo anterior, primero importe el módulo docx y luego cree un objeto de la clase Documento desde el módulo docx. Pase la ruta de my_word_file.docx al constructor de la clase Document, como se muestra en el siguiente script:

1
2
3
import docx

doc = docx.Document("E:/my_word_file.docx")

El objeto de clase Documento doc ahora se puede usar para leer el contenido de my_word_file.docx.

Leer párrafos

Una vez que crea un objeto de la clase Documento utilizando la ruta del archivo, puede acceder a todos los párrafos del documento a través del atributo paragraphs. Una línea vacía también se lee como un párrafo por el Documento. Busquemos todos los párrafos de my_word_file.docx y luego mostremos el número total de párrafos en el documento:

1
2
all_paras = doc.paragraphs
len(all_paras)

Producción:

1
10

Ahora imprimiremos iterativamente todos los párrafos en el archivo my_word_file.docx:

1
2
3
for para in all_paras:
    print(para.text)
    print("-------")

Producción:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
-------
Introduction
-------

-------
Welcome to wikihtp.com
-------
The best site for learning Python and Other Programming Languages
-------
Learn to program and write code in the most efficient manner
-------

-------
Details
-------

-------
This website contains useful programming articles for Java, Python, Spring etc.
-------

El resultado muestra todos los párrafos del archivo de Word.

Incluso podemos acceder a un párrafo específico indexando la propiedad paragraphs como una matriz. Imprimamos el quinto párrafo en el archivo:

1
2
single_para = doc.paragraphs[4]
print(single_para.text)

Producción:

1
The best site for learning Python and Other Programming Languages

Lecturas

Una ejecución en un documento de Word es una secuencia continua de palabras que tienen propiedades similares, como tamaños de fuente, formas de fuente y estilos de fuente similares. Por ejemplo, si observa la segunda línea de my_word_file.docx, contiene el texto "Bienvenido a wikihtp.com", aquí el texto "Bienvenido a" está en letra simple, mientras que el texto "wikihtp .com" está en negrita. Por lo tanto, el texto "Bienvenido a" se considera como una ejecución, mientras que el texto en negrita "wikihtp.com" se considera como otra ejecución.

De manera similar, "Aprender a programar y escribir código de la manera más eficiente" se tratan como dos ejecuciones diferentes en el párrafo "Aprender a programar y escribir código de la manera más eficiente".

Para obtener todas las ejecuciones en un párrafo, puede usar la propiedad ejecutar del atributo paragraph del objeto doc.

Leamos todas las líneas del párrafo número 5 (4to índice) en nuestro texto:

1
2
3
single_para = doc.paragraphs[4]
for run in single_para.runs:
    print(run.text)

Producción:

1
2
3
4
The best site for
learning Python
 and Other
Programming Languages

De la misma manera, el siguiente script imprime todas las ejecuciones desde el párrafo 6 del archivo my_word_file.docx:

1
2
3
second_para = doc.paragraphs[5]
for run in second_para.runs:
    print(run.text)

Producción:

1
2
Learn to program and write code in the
most efficient manner

Escribir archivos de MS Word con el módulo Python-Docx

En la sección anterior, vio cómo leer archivos de MS Word en Python usando el módulo python-docx. En esta sección, verá cómo escribir archivos de MS Word a través del módulo python-docx.

Para escribir archivos de MS Word, debe crear un objeto de la clase Documento con un constructor vacío o sin pasar un nombre de archivo.

1
mydoc = docx.Document()

Escribiendo párrafos

Para escribir párrafos, puede usar el método add_paragraph() del objeto de clase Document. Una vez que haya agregado un párrafo, deberá llamar al método save() en el objeto de la clase Document. La ruta del archivo en el que desea escribir su párrafo se pasa como parámetro al método save(). Si el archivo aún no existe, se creará un nuevo archivo; de lo contrario, el párrafo se agregará al final del archivo de MS Word existente.

El siguiente script escribe un párrafo simple en un archivo de MS Word recién creado llamado "mi_archivo_escrito.docx".

1
2
mydoc.add_paragraph("This is first paragraph of a MS Word file.")
mydoc.save("E:/my_written_file.docx")

Una vez que ejecute el script anterior, debería ver un nuevo archivo "mi_archivo_escrito.docx" en el directorio que especificó en el método save(). Dentro del archivo, debería ver un párrafo que dice "Este es el primer párrafo de un archivo de MS Word."

Agreguemos otro párrafo a mi_archivo_escrito.docx:

1
2
mydoc.add_paragraph("This is the second paragraph of a MS Word file.")
mydoc.save("E:/my_written_file.docx")

Este segundo párrafo se agregará al final del contenido existente en mi_archivo_escrito.docx.

Ejecuciones de escritura

También puede escribir ejecuciones usando el módulo python-docx. Para escribir ejecuciones, primero debe crear un identificador para el párrafo al que desea agregar su ejecución. Eche un vistazo al siguiente ejemplo para ver cómo se hace:

1
2
3
third_para = mydoc.add_paragraph("This is the third paragraph.")
third_para.add_run(" this is a section at the end of third paragraph")
mydoc.save("E:/my_written_file.docx")

En el script de arriba escribimos un párrafo usando el método add_paragraph() del objeto de clase Document mydoc. El método add_paragraph() devuelve un identificador para el párrafo recién agregado. Para agregar una ejecución al nuevo párrafo, debe llamar al método add_run() en el identificador del párrafo. El texto de la ejecución se pasa en forma de cadena al método add_run(). Finalmente, debe llamar al método save() para crear el archivo real.

Escritura de encabezados

También puede agregar encabezados a archivos de MS Word. Para hacerlo, debe llamar al método add_heading(). El primer parámetro del método add_heading() es la cadena de texto para el encabezado, y el segundo parámetro es el tamaño del encabezado. Los tamaños de encabezado comienzan desde 0, siendo 0 el encabezado de nivel superior.

La siguiente secuencia de comandos agrega tres encabezados de nivel 0, 1 y 2 al archivo mi_archivo_escrito.docx:

1
2
3
4
mydoc.add_heading("This is level 1 heading", 0)
mydoc.add_heading("This is level 2 heading", 1)
mydoc.add_heading("This is level 3 heading", 2)
mydoc.save("E:/my_written_file.docx")

Adición de imágenes

Para agregar imágenes a archivos de MS Word, puede usar el método add_picture(). La ruta a la imagen se pasa como parámetro al método add_picture(). También puede especificar el ancho y el alto de la imagen usando el atributo docx.shared.Inches(). El siguiente script agrega una imagen del sistema de archivos local al archivo de Word my_write_file.docx. El ancho y el alto de la imagen serán de 5 y 7 pulgadas, respectivamente:

1
2
mydoc.add_picture("E:/eiffel-tower.jpg", width=docx.shared.Inches(5), height=docx.shared.Inches(7))
mydoc.save("E:/my_written_file.docx")

Después de ejecutar todas las secuencias de comandos en la sección Escritura de archivos de MS Word con el módulo Python-Docx de este artículo, su archivo final mi_archivo_escrito.docx debería tener este aspecto:

writing ms word files in python

En el resultado, puede ver los tres párrafos que agregó al archivo de MS Word, junto con los tres encabezados y una imagen.

Conclusión

El artículo dio una breve descripción de cómo leer y escribir archivos de MS Word usando el módulo python-docx. El artículo cubre cómo leer párrafos y se ejecuta desde un archivo de MS Word. Finalmente, en este artículo se explica el proceso de escribir archivos de MS Word, agregar un párrafo, líneas, encabezados e imágenes a archivos de MS Word.

Licensed under CC BY-NC-SA 4.0