es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Documento OpenOffice odt, regex y arrays.

Estoy intentando trabajar con un documento odt de ~300 páginas. Sé cómo cargar documentos en Python, al menos de forma básica. Sin embargo, eso no funcionó para el odt (no es un archivo de texto). Investigé esto e instalé la biblioteca odfpy, aunque no parece estar bien documentada. Soy capaz de llegar al punto en el que tengo un array de ello. Pero no sé cómo funcionaría intentar usar regex en múltiples elementos del array. Así que intenté convertirlo con “str()” a una cadena de texto, y todo lo que obtuve fue una larga lista de direcciones.

Quiero poder cargar un documento odt y ejecutar una regex para eliminar cierto patrón del mismo. ¿Cómo puedo hacer esto…? Hasta ahora, lo que he estado intentando no funciona. Me gustaría mantener la estructura del odt intacta. Estoy más acostumbrado a los archivos de texto.

import sys
import re
from odf.opendocument import load
from odf import text, teletype
infile = load(r'C:\Users\Iainc\Documents\Blah Blah.odt')
allparas = infile.getElementsByType(text.P)
stringallparas = str(allparas)

Hasta ahora, esto es lo que tengo que, creo, es exitoso. Pero ciertas cosas que funcionarían con .txt no están funcionando.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para ejecutar una regex en el contenido de un documento odt, primero deberá convertir el documento en una cadena que pueda ser analizada por el motor de regex. En el fragmento de código proporcionado, ya ha cargado el documento odt utilizando la biblioteca odfpy y ha obtenido una matriz de todos los párrafos del documento.

    Para convertir la matriz de párrafos en una cadena, puede utilizar la función tostring() del módulo teletype, de la siguiente manera:

    # convertir todos los párrafos en una cadena
    string_allparas = teletype.tostring(allparas)
    

    Ahora puede aplicar la función regex a la cadena como lo haría normalmente con cualquier otro archivo de texto en Python. Por ejemplo, si desea eliminar todas las ocurrencias de un patrón específico de la cadena, puede utilizar la función re.sub():

    # eliminar todas las ocurrencias de un patrón de la cadena
    patrón = r"some_pattern_to_remove"
    cleaned_string = re.sub(patrón, "", string_allparas)
    

    Después de aplicar la función regex, obtendrá una nueva cadena con el patrón especificado eliminado. Luego puede guardar esta cadena en un formato odt utilizando la función odf.opendocument.save(), de la siguiente manera:

    # guardar la cadena limpia en un nuevo archivo odt
    new_doc = load("")
    new_doc.text.addElement(text.P(text=cleaned_string))
    odf.opendocument.save(new_doc, r"C:\Users\Iainc\Documents\cleaned_document.odt")
    

    En este ejemplo, primero creamos un nuevo documento odt vacío utilizando la función load(), y luego agregamos la cadena limpia como un nuevo párrafo utilizando la función addElement(). Finalmente, guardamos el nuevo documento utilizando la función odf.opendocument.save(). Esto guardará el nuevo documento en la ruta de archivo especificada.

    Tenga en cuenta que, dado que los archivos odt son documentos estructurados, es posible que no se conserven todos los formatos después de ejecutar la función regex. Sin embargo, el texto y la estructura del párrafo deberían permanecer intactos.

Comments are closed.