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.

Cuando se reemplace el contenido del archivo de Word y se guarde el archivo, el bucle “for” solo se ejecuta una vez.

Mi objetivo es reemplazar cierto contenido específico en un archivo de Word y luego guardar el archivo en el directorio antiguo. Me gustaría reemplazar el mismo archivo de Word y generar varios archivos. Usé un bucle for y no logró generar 3 archivos en lugar de solo 1 archivo. Todavía no puedo ver cuál es el problema. ¿Alguien puede ayudarme?

Los códigos son los siguientes:

from docx import Document
import os


def main():
    path = r'C:\Users\Sharon.X.Fang\Desktop'
    EXPERT_NAME = ['Yang', 'Xie', 'Wang']
    template_file_path = path+os.sep+'to Mr.Xie-invitation.docx'
    i = 0
    for name in EXPERT_NAME:
        for i in range(3):
            output_file_path = path+os.sep+str(i)+'to Mr.'+name+'-invitation.docx'
    i = i + 1

    variables = {
        "${EXPERT_NAME}": "Mr.Xie",
        "${Fee}": "1,000",
        "${Q_1}": "¿Cuál es tu hobby?",
        "${Q_2}": "¿Cómo estás?",
    }

    template_document = Document(template_file_path)

    for variable_key, variable_value in variables.items():
        for paragraph in template_document.paragraphs:
            replace_text_in_paragraph(paragraph, variable_key, variable_value)

    template_document.save(output_file_path)


def replace_text_in_paragraph(paragraph, key, value):
    if key in paragraph.text:
       paragraph.text = paragraph.text.replace(key, value)


if __name__ == '__main__':
    main()
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Hay algunos problemas con el código proporcionado:

    1. El bucle for que genera las rutas de los archivos de salida no está indentado correctamente. Debería estar indentado debajo del primer bucle for que itera a través de los nombres en la lista EXPERT_NAME.
    2. La variable i se incrementa fuera del bucle for que genera las rutas de los archivos de salida, por lo que siempre será 3 cuando llegue a la línea template_document.save(output_file_path). Esto significa que solo se utilizará la última ruta de archivo de salida generada para guardar el documento.

    Para solucionar estos problemas, el código debe ser revisado de la siguiente manera:

    from docx import Document
    import os
    
    
    def main():
        path = r'C:\Users\Sharon.X.Fang\Desktop'
        EXPERT_NAME = ['Yang', 'Xie', 'Wang']
        template_file_path = path + os.sep + 'to Mr.Xie-invitation.docx'
        variables = {
            "${EXPERT_NAME}": "Mr.Xie",
            "${Fee}": "1,000",
            "${Q_1}": "¿Cuál es tu hobby?",
            "${Q_2}": "¿Cómo estás?",
        }
    
        for name in EXPERT_NAME:
            for i in range(3):
                output_file_path = (
                    path + os.sep + str(i) + 'to Mr.' + name + '-invitation.docx'
                )
    
                template_document = Document(template_file_path)
                for variable_key, variable_value in variables.items():
                    for paragraph in template_document.paragraphs:
                        replace_text_in_paragraph(paragraph, variable_key, variable_value)
    
                template_document.save(output_file_path)
    
    
    def replace_text_in_paragraph(paragraph, key, value):
        if key in paragraph.text:
            paragraph.text = paragraph.text.replace(key, value)
    
    
    if __name__ == '__main__':
        main()
    

    Esto generará 9 archivos de salida, 3 para cada nombre de experto.

Comments are closed.