Как заменить несколько слов в файле .docx и сохранить файл docx с помощью python-docx - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь изменить содержимое документа, используя библиотеку python-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

Как я могу сохранить все замены? Список слов может увеличиваться, а его размер не является фиксированным.

1 Ответ

0 голосов
/ 04 января 2019

Этот следующий код работает для меня. Это сохранит и формат. Надеюсь, что это поможет другим.

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
...