@kvellou

Почему происходит 1 изменение но другое не происходит в word с python docx?

Вот файл до изменении:
(жёлтые это те которых нужно изменить, зелёные это те которые изменились)
6494812d55eb9204903798.png

После:
6494816bb909e527457393.png

Нужно изменить:
1. Заменить слово "местное" на "местного"
2. Удалить строку "Павлово-Посадский городской округ -"

Вот код:
import re
from docx import Document


def find_and_remove_text(doc, target_text):
    paragraphs = doc.paragraphs
    for paragraph in paragraphs:
        if target_text in paragraph.text:
            inline = paragraph.runs
            for i in range(len(inline)):
                if target_text in inline[i].text:
                    text = inline[i].text.replace(target_text, '')
                    inline[i].text = text
    doc.save("C:\\Users\\123\\Documents\\логотип\\программа\\2.3_Экономические хар-ки.docx")


def find_and_replace_text(doc, target_text, replacement_text):
    for paragraph in doc.paragraphs:
        if target_text in paragraph.text:
            paragraph.text = re.sub(target_text, replacement_text, paragraph.text)


# Load the Word document
doc = Document("C:\\Users\\123\\Documents\\логотип\\программа\\2.3_Экономические хар-ки.docx")

# Define the text to be removed and the text to be replaced
target_text_remove = 'Павлово-Посадский городской округ - '
target_text_replace = 'местное'
replacement_text = 'местного'

# Find and remove the text
find_and_remove_text(doc, target_text_remove)

doc.save("C:\\Users\\123\\Documents\\логотип\\программа\\2.docx")
# Find and replace the text

doc1 = Document("C:\\Users\\123\\Documents\\логотип\\программа\\2.docx")
find_and_replace_text(doc1, target_text_replace, replacement_text)

# Save the modified document


Можете пожалуйста объяснить что не так? Вроде бы все правильно. Может дело в сохранении файла?
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Вполне возможно, что строка "Павлово-Посадский городской округ -" занимает несколько соседних runs.
Тебе нужно сначала попробовать найти параграф, у котого в text эта строка вообще встречается. Если найдёшь - то тогда придётся как-то идентифицировать runs, в которых содержатся части этой строки, и обрабатывать их по кусочкам.

Это, к слову, относится и к коротким строкам - никто не запрещает создать документ, где "местное" будет занимать 7 runs по одной букве каждый...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы