Как использовать итерацию Python для чтения абзацев, таблиц и рисунков в слове? - PullRequest
1 голос
/ 01 апреля 2019

Пока что я нашел способ читать абзацы и таблицы в слове последовательно и итеративно, но я застрял в том, как читать картинки последовательно.Я хотел бы попросить вас помочь мне на основе оригинального кода, чтобы добиться, как последовательность изображений слова итерации?Вот мой текущий код

from docx.document import Document as _Document
from docx.oxml.text.paragraph import CT_P
from docx.oxml.table import CT_Tbl
from docx.table import _Cell, Table, _Row
from docx.text.paragraph import Paragraph
import docx
path = './test.docx'
doc = docx.Document(path)

def iter_block_items(parent):
    if isinstance(parent, _Document):
        parent_elm = parent.element.body
    elif isinstance(parent, _Cell):
        parent_elm = parent._tc
    elif isinstance(parent, _Row):
        parent_elm = parent._tr
    else:
        raise ValueError("something's not right")
    for child in parent_elm.iterchildren():
        if isinstance(child, CT_P):
            yield Paragraph(child, parent)
        elif isinstance(child, CT_Tbl):
            yield Table(child, parent)

for block in iter_block_items(doc):
    # read Paragraph
    if isinstance(block, Paragraph):
        print(block.text)
    # read table
    elif isinstance(block, Table):
        print(block.style.name)

1 Ответ

0 голосов
/ 01 апреля 2019

Вы хотите изменить iter_block_items таким образом, чтобы тело итерации обрабатывало регистр изображения: в настоящее время оно обрабатывает (и выдает) только абзацы и таблицы.

Я на самом деле не знаю формат, но вам может потребоваться docx.oxml.shape.CT_Picture для "типа флага". Просматривая документацию, python-docx, похоже, не имеет графической версии обертки Table или Paragraph.

...