Python: чтение документа Word по порядку

Первый пользователь Python здесь. Я пытаюсь просмотреть текстовый документ, содержащий как абзацы, так и таблицы. Я понял, как просмотреть все абзацы в документе и все таблицы в документе с помощью кода ниже:

for table in doc.tables:
    for row in table.rows:
        for cell in row.cells:
             print(str(paragraph.text))

for i in doc.paragraphs:
    splitstring = i.text.split(" ", 1)
    print(splitstring[0])

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

Paragraph 1
Paragraph 2
Table 1
Paragraph 3
Table 2
Paragraph 4

Он будет читать их в таком порядке. Причина, по которой я хочу это сделать, заключается в том, что в зависимости от того, за каким абзацем следует таблица, я хочу выполнять с ней разные операции.


person Bob    schedule 21.04.2020    source источник


Ответы (1)


Это зависит от того, есть ли у вас доступ к информации о заказе в вашем коде.

В опубликованном вами коде есть два цикла:
один для вывода содержимого каждой таблицы.
один для вывода содержимого каждого абзаца.

Эти циклы выполняются последовательно, но вы хотели бы переплести их функции, примерно так:

def print_table(table):
    for row in table.rows:
        for cell in row.cells:
            print(str(cell.text))

def print_paragraph(paragraph): 
    splitstring = paragraph.text.split(" ", 1)
    print(splitstring[0])

# Main loop:
for entry in doc.entries: 

   if isinstance(entry, doc.paragraph):
       print_paragraph(entry)
   else:
       print_table(entry)

Таким образом, вам нужно знать, есть ли у вас доступ к порядку данных.
В приведенном выше гипотетическом коде структура данных doc.entries хранит порядок таблицы/абзаца.

person Max Crous    schedule 21.04.2020
comment
Привет, Макс, спасибо за ответ. Ваше предложение имеет смысл, но я получаю сообщение об ошибке AttributeError: 'Document' object has no attribute 'entries'. Любые идеи? - person Bob; 21.04.2020
comment
Привет, Боб, мой код был гипотетическим, doc.entries — это имя, которое я придумал. Я не знаю, есть ли у вас доступ к атрибуту, который содержит абзацы и таблицы в том порядке, в котором они появляются. Вам нужно открыть это. Откуда взялась ваша переменная doc? Это из библиотеки Python? Может быть, тогда есть документация в Интернете. Если у вас нет доступа к источнику переменной doc, попробуйте print(dir(doc)). Это покажет вам все атрибуты и методы, которые имеет переменная doc. - person Max Crous; 21.04.2020