首页 > 解决方案 > 用来自 csv 的数据填充 word 模板。Python

问题描述

我有一个简单的 .docx 模板,其中有 {ISO} 占位符。此占位符应替换为 CSV 文件中的 ISO 代码。之后应该创建 3 个输出文档。

问题是它会迭代,new_textparagraph.text它始终是列表中的第一个 ISO。new_text此外,它仅在paragraph.text = str.replace(orig_text_2,'{ISO}', iso_code)被注释掉时才会迭代。

from docx import Document
import pandas as pd

document = Document('Dear.docx')
csv = pd.read_csv('csv_file.csv', delimiter=';')

countries = csv.Country.tolist()

print(countries)
for paragraph in document.paragraphs:
    if '{ISO}' in paragraph.text:
        for iso in countries:

            iso_code = csv.loc[csv['Country'] == iso, 'Country'].values[0]
            print(iso_code)
            orig_text_1 = paragraph.text
            orig_text_2 = paragraph.text
            new_text = str.replace(orig_text_1, '{ISO}', iso_code)
            #paragraph.text = str.replace(orig_text_2,'{ISO}', iso_code) 

            print(new_text)
            print(paragraph.text)

            document.save('Output_{}.docx'.format(iso))

注释掉的输出paragraph.text = str.replace(orig_text_2,'{ISO}', iso_code)

['AFG', 'PWL', 'HIT']
AFG
Dear AFG,
Dear {ISO},
PWL
Dear PWL,
Dear {ISO},
HIT
Dear HIT,
Dear {ISO},

未注释的输出paragraph.text = str.replace(orig_text_2,'{ISO}', iso_code)

['AFG', 'PWL', 'HIT']
AFG
Dear AFG,
Dear AFG,
PWL
Dear AFG,
Dear AFG,
HIT
Dear AFG,
Dear AFG,

我需要更新paragraph.text才能写入输出文档,否则在输出文档中总是有列表中的第一个 ISO 代码。

你能帮我解决这个问题吗?

标签: pythonpython-docx

解决方案


推荐阅读