使用来自 csv 的数据填充单词模板。 Python

时间:2021-03-05 07:31:18

标签: python python-docx

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

问题在于它使用 new_text 进行迭代,但使用 paragraph.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 代码。

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

0 个答案:

没有答案