@Nadin7777

Как сохранить нумерацию абзаца, сделанную с помощью функционала word при чтении в python. Как корректно прочитать файл docx?

Вот код, которым я читаю файл:
pip install python-docx
import docx
doc = docx.Document("C:/Users/Сhange_contract_14.docx")
text = []
for paragraph in doc.paragraphs:
    text.append(paragraph.text)
print('\n'.join(text))

Далее нужно работать с документом с применением регулярных выражений.
У документа пропадает нумерация абзацев, которая была сделана в word с использованием сервиса "Нумерация", который автоматически каждый абзац в тексте нумерует по правилам, выбранным пользователем, с разной глубиной:
1.
1.1.
1.1.1. и т.д.

Так вот, с помощью кода, написанного выше, в документе остается только нумерация проставленная в ручную, а автоматическая исчезает. Как правильно нужно прочитать документ, что бы избежать проблемы. Может есть какие то параметры, которые устанавливаются при чтении файла или может есть другая библиотека, которая способна это делать?
  • Вопрос задан
  • 61 просмотр
Пригласить эксперта
Ответы на вопрос 1
i229194964
@i229194964
Веб разработчик
import docx

def get_paragraph_number(paragraph):
    """ Функция для определения номера абзаца, если он существует. """
    numPr = paragraph._element.xpath('.//w:numPr')
    if numPr:
        numId = numPr[0].xpath('.//w:numId')[0].get('{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val')
        lvl = numPr[0].xpath('.//w:ilvl')[0].get('{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val')
        return f"{numId}.{lvl}"
    else:
        return "Нет нумерации"

# Загрузка документа
doc = docx.Document("C:/Users/Сhange_contract_14.docx")

for paragraph in doc.paragraphs:
    number = get_paragraph_number(paragraph)
    print(f"{number}: {paragraph.text}")
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы