python-docx получить таблицы из абзаца

У меня есть файл .docx с множеством абзацев и таблиц, например:

  1. par1
    • table1
    • Таблица 2
    • table3
  2. par2

    • table1
    • Таблица 2

    2.1 п.21

    • Таблица 1
    • Таблица 2

Мне нужно перебрать все объекты и создать словарь, возможно, в формате json, например:

   {par1: [table1, table2, table3], par2[table1,table2, {par21: [table1,table2]} ] }
    from docx.api import Document

    filename = 'test.docx'
    document = Document(docx=filename)
    for table in document.tables:
        print table

    for paragraph in document.paragraphs:
        print paragraph.text

Как связать каждый абзац и таблицы?

Вы можете что-нибудь подсказать?


person Konstantyn    schedule 24.03.2015    source источник


Ответы (3)


Такой метод (пока) не реализован в библиотеке python-docx, но есть обходной путь для перебора всех элементов docx в том порядке, в котором они представлены: https://github.com/python-openxml/python-docx/issues/40

Вы можете попробовать повторить все это и проверить, является ли объект экземпляром таблицы или абзаца, и основывать свою логику на этом.

person grafuls    schedule 11.08.2015

Не уверен, помогаю ли я, но вот мой способ сделать

def printTables(doc):
    for table in doc.tables:
        for row in table.rows:
            for cell in row.cells:
                for paragraph in cell.paragraphs:
                    print(paragraph.text)
                printTables(cell)
person Community    schedule 29.01.2020
comment
К сожалению, он печатает заголовок таблицы. - person Konstantyn; 30.01.2020
comment
Предложение: вы можете попробовать распечатать текст абзаца в списке и удалить первый элемент, который, скорее всего, будет заголовком таблицы? Поделитесь, если сможете запустить и запустить! - person ; 31.01.2020

person    schedule
comment
Я пробовал это, отображается не весь текст, отображаются только имена столбцов, это то, что он должен отображать? это то, что docx не открывается правильно в моей системе? Я хотел бы узнать больше об этом коде и о том, как исправить свою проблему. - person Imane E.; 03.02.2018
comment
Вы знаете, можно ли провести рефакторинг этой функции, а также найти InlineShapes? - person o.O; 10.12.2018
comment
Я хочу направить будущих читателей к этому github по этой проблеме. это запрошенная функция для API - person Czarking; 24.08.2020
comment
@ImaneE. возможно, слишком поздно, но ваша проблема может быть связана с этим изменением - person Czarking; 24.08.2020