如何在.docx文件中替换多个单词并使用python-docx保存docx文件

时间:2019-01-03 10:54:49

标签: python python-docx

我正在尝试使用python-docx库更改docx的内容。我的更改是关于替换单词。因此,我有单词Original word list: ['ABC','XYZ']的列表,需要将其替换为revised word list: ['PQR', 'DEF']。我还需要保留这些单词的格式。现在,我只能保存一个更改。这是我的参考代码。

def replace_string(filename='test.docx'):
doc = Document(filename)
list= ['ABC','XYZ']
list2 = ['PQR','DEF']
for p in doc.paragraphs:
        print(p.text)
        for i in range(0, len(list)):
            if list[i] in p.text:
                print('----!!SEARCH FOUND!!------')
                print(list[i])
                print(list2[i])
                print('\n')
                inline = p.runs
                # Loop added to work with runs (strings with same style)
                for i in range(len(inline)):
                    #print(inline[i].text)
                    if list[i] in inline[i].text:
                        print('----SEARCH FOUND!!------')
                        text = inline[i].text.replace(list[i], list2[i])
                        inline[i].text = text
                        print(inline[i].text)
        doc.save('dest1.docx')
return 1

replace_string()

test.docx文件的原始内容:

ABC XYZ

dest1.docx文件的修改内容或保存的内容:

PQR XYZ

如何保存所有替代品?单词列表可能会增加,并且大小不固定。

2 个答案:

答案 0 :(得分:0)

以下代码对我有用。这也保留了格式。希望这对其他人有帮助。

def replace_string1(filename='test.docx'):
doc = Document(filename)
list= ['ABC','XYZ']
list2 = ['PQR','DEF']
for p in doc.paragraphs:
    inline = p.runs
    for j in range(0,len(inline)):
        for i in range(0, len(list)):
            inline[j].text = inline[j].text.replace(list[i], list2[i])
            print(p.text)
            print(inline[j].text)
doc.save('dest1.docx')
return 1

答案 1 :(得分:0)

我实现了JT28解决方案的一个版本,使用字典替换文本(而不是两个列表)-这使我可以更简单地生成配对查找和替换项。关键是我要寻找的东西,而v是新子字符串中的东西。该功能允许在一个段落或所有段落中进行替换,具体取决于调用者是否在doc.paragraphs上进行迭代。

SomeChild