Найти и заменить текст в файле .docx - Python
Мы занимались поиском метода для поиска и замены текста в файле DOCX без особой удачи. Я'я попробовал модуль docx и не смог заставить его работать. В конце концов я разработал метод, описанный ниже, используя модуль zipfile и заменив файл document.xml в архиве docx. Чтобы это работало, вам нужен шаблонный документ (docx) с текстом, который вы хотите заменить как уникальные строки, которые могут не соответствовать ни одному другому существующему или будущему тексту в документе (например, "."Встреча с XXXCLIENTNAMEXXX XXXMEETDATEXXX прошла очень хорошо ».).
import zipfile
replaceText = {"XXXCLIENTNAMEXXX" : "Joe Bob", "XXXMEETDATEXXX" : "May 31, 2013"}
templateDocx = zipfile.ZipFile("C:/Template.docx")
newDocx = zipfile.ZipFile("C:/NewDocument.docx", "a")
with open(templateDocx.extract("word/document.xml", "C:/")) as tempXmlFile:
tempXmlStr = tempXmlFile.read()
for key in replaceText.keys():
tempXmlStr = tempXmlStr.replace(str(key), str(replaceText.get(key)))
with open("C:/temp.xml", "w+") as tempXmlFile:
tempXmlFile.write(tempXmlStr)
for file in templateDocx.filelist:
if not file.filename == "word/document.xml":
newDocx.writestr(file.filename, templateDocx.read(file))
newDocx.write("C:/temp.xml", "word/document.xml")
templateDocx.close()
newDocx.close()
Мой вопрос в том, чтоне так с этим методом? Я'Я довольно новичок в этом, так что я чувствую, что кто-то другой уже должен был это понять. Что приводит меня к мысли, что с этим подходом что-то не так. Но это работает! Что мне здесь не хватает?
Вот пошаговое руководство по моему мыслительному процессу для всех, кто пытается изучить этот материал:
Шаг 1) Подготовьте словарь Python для текстовых строк, которые вы хотите заменить как ключи, а новый текст - как элементы (например, {"XXXCLIENTNAMEXXX ":"Джо Боб ","XXXMEETDATEXXX ":"31 мая 2013 года}).
Шаг 2) Откройте файл шаблона docx с помощью модуля zipfile.
Шаг 3) Откройте новый новый файл docx с режимом доступа добавления.
Шаг 4) Извлеките document.xml (там, где живет весь текст) из файла шаблона docx и прочитайте xml в текстовую строковую переменную.
Шаг 5) Используйте цикл for, чтобы заменить весь текст, определенный в вашем словаре в текстовой строке xml, новым текстом.
Шаг 6) Запишите текстовую строку XML в новый временный файл XML.
Шаг 7) Используйте цикл for и модуль zipfile, чтобы скопировать все файлы из архива docx шаблона в новый архив docx, КРОМЕ файла word / document.xml.
Шаг 8) Запишите временный xml-файл с замененным текстом в новый архив docx как новый файл word / document.xml.
Шаг 9) Закройте шаблон и новые архивы docx.
Шаг 10) Откройте новый документ в формате docx и наслаждайтесь замененным текстом!
--Edit-- Отсутствуют закрывающие скобки ')' по строкам 7 и 11