【问题标题】:When replace word file content and save the word file, for loop only loops once替换word文件内容并保存word文件时,for循环只循环一次
【发布时间】:2022-01-13 13:35:28
【问题描述】:

我的目标是替换word文件中的一些特定内容,然后将文件保存到旧目录。我想替换同一个word文件并生成多个文件。我使用 for 循环,它未能生成 3 个文件而不是仅 1 个文件。我仍然看不出问题出在哪里。有人可以帮助我吗? 代码是这样的:

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}": "What is your hobby?",
        "${Q_2}": "How are you?",
                }
    
    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()

【问题讨论】:

    标签: python for-loop directory docx python-docx


    【解决方案1】:

    我认为主要问题是您在循环之外创建了文档:

    def main():
        path = r'C:\Users\Sharon.X.Fang\Desktop'
        EXPERT_NAMES = ['Yang','Xie','Wang']
        template_file_path = path+os.sep+'to Mr.Xie-invitation.docx'
    
        for i, name in enumerate(EXPERT_NAMES):
            output_file_path = (
                path+os.sep+str(i)+'to Mr.'+name+'-invitation.docx'
            )
    
            variables = {
                "${EXPERT_NAME}": name,
                "${Fee}": "1,000",
                "${Q_1}": "What is your hobby?",
                "${Q_2}": "How are you?",
            }
        
            template_document = Document(template_file_path)
            replace_text_in_document(template_document, variables)
            template_document.save(output_file_path)
    
    
    def replace_text_in_document(document, variables):    
        for variable_key, variable_value in variables.items():
            for paragraph in document.paragraphs:
                replace_text_in_paragraph(
                    paragraph, variable_key, variable_value
                )
    
    
    def replace_text_in_paragraph(paragraph, key, value):
        if key in paragraph.text:
           paragraph.text = paragraph.text.replace(key, value)
       
                
    if __name__ == '__main__':
        main()
    

    【讨论】:

    • 非常感谢您的帮助。我会试试你的代码并再次运行!!!
    • 如果我想用列表替换“${EXPERT_NAME}”,例如['Mr.Xie',Mr.Chan','Mr.Wang'],而不仅仅是“Mr.谢”,如何实现?
    • 我更新了代码,我想你想要name 出现在"Mr.Xie" 的地方。
    • @AmsterdamTimes 欢迎来到 StackOverflow。不要忽略通过单击其左侧的复选标记来接受答案。这就是你在 SO 上说谢谢的方式,也可以建立你的声誉点 :)
    猜你喜欢
    • 2014-11-06
    • 2016-01-09
    • 2018-03-09
    • 2020-10-14
    • 2019-10-31
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    相关资源
    最近更新 更多