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

    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 necesita leer texto de documentos de Word dentro de otra aplicación.

    Por ejemplo, si está desarrollando una aplicación de procesamiento de lenguaje natural en Python que toma archivos de MS Word como entrada, deberá leer los archivos de MS Word en Python antes de poder procesar el texto. De manera similar, a menudo es necesario 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 python-docx módulo debido a su facilidad de uso. Ejecute lo siguiente pip comando en su terminal para descargar el python-docx módulo como se muestra a continuación:

    $ pip install python-docx
    

    Lectura de 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 python-docx módulo.

    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:

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

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

    los Document objeto de clase doc ahora se puede usar para leer el contenido de my_word_file.docx.

    Lectura de párrafos

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

    all_paras = doc.paragraphs
    len(all_paras)
    

    Salida:

    10
    

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

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

    Salida:

    -------
    Introduction
    -------
    
    -------
    Welcome to Pharos.sh.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.
    -------
    

    La salida muestra todos los párrafos del archivo de Word.

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

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

    Salida:

    The best site for learning Python and Other Programming Languages
    

    Ejecuciones de lectura

    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 Pharos.sh.com», aquí el texto «Bienvenido a» está en fuente simple, mientras que el texto «Pharos.sh.com» está en cara atrevida. Por lo tanto, el texto «Bienvenido a» se considera como una ejecución, mientras que el texto en negrita «Pharos.sh.com» se considera como otra ejecución.

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

    Para obtener todas las corridas en un párrafo, puede usar el run propiedad de la paragraph atributo del doc objeto.

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

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

    Salida:

    The best site for
    learning Python
     and Other
    Programming Languages
    

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

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

    Salida:

    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 python-docx módulo. En esta sección, verá cómo escribir archivos de MS Word a través del python-docx módulo.

    Para escribir archivos de MS Word, debe crear un objeto del Document class con un constructor vacío, o sin pasar un nombre de archivo.

    mydoc = docx.Document()
    

    Redacción de párrafos

    Para escribir párrafos, puede utilizar el add_paragraph() método del Document objeto de clase. Una vez que haya agregado un párrafo, deberá llamar al save() método en el Document objeto de clase. La ruta del archivo en el que desea escribir su párrafo se pasa como parámetro a la save() método. 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.

    La siguiente secuencia de comandos escribe un párrafo simple en un archivo de MS Word recién creado llamado «my_written_file.docx».

    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 «my_written_file.docx» en el directorio que especificó en el save() método. 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 my_written_file.docx:

    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 my_written_file.docx.

    Ejecuciones de escritura

    También puede escribir ejecuciones usando el python-docx módulo. 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:

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

    Escribir encabezados

    También puede agregar encabezados a archivos de MS Word. Para hacerlo, debe llamar al add_heading() método. El primer parámetro del add_heading() El método 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.

    El siguiente script agrega tres encabezados de nivel 0, 1 y 2 al archivo my_written_file.docx:

    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")
    

    Agregar imágenes

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

    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 todos los scripts en la sección Escribir archivos de MS Word con el módulo Python-Docx de este artículo, su archivo final my_written_file.docx debería verse así:

    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 brindó una breve descripción de cómo leer y escribir archivos de MS Word usando el python-docx módulo. El artículo cubre cómo leer párrafos y se ejecuta desde un archivo de MS Word. Finalmente, en este artículo se ha explicado el proceso de escribir archivos de MS Word, agregar un párrafo, ejecuciones, encabezados e imágenes a archivos de MS Word.

    Etiquetas:

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *