kuyoro 2022-02-22 11:49 采纳率: 92.7%
浏览 409
已结题

python 如何按照word顺序遍历每一段落(包括段落的自动编号)和每一个表格

网上参考一段代码可以按照顺序判断每一段是text还是table,可以依次进行判断:

from docx import Document
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, _Row, Table
from docx.text.paragraph import Paragraph

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(document): # 按照文章顺序进行遍历
        if isinstance(block, Paragraph): # 如果是文本
                    // 遍历段落文本,但是无法识别word自动编号的编号如,1. aa,(2) .aa 中的1,(2)
        elif isinstance(block, Table) : # 如果是表格
                    // 读取表格,暂时没有问题

通过调试bock属性,暂时没有发现编号的信息,不知如何实现呢?

  • 写回答

3条回答 默认 最新

  • CSDN专家-HGJ 2022-02-22 14:53
    关注

    使用docx读取段落自动编号比较麻烦,可以用另一个库docx2python,读取成列表,分级编号无论是数字还是字母都能读取出来

    from docx2python import docx2python
    document = docx2python("t0222.docx")
    print(document.body)
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月3日
  • 已采纳回答 2月23日
  • 修改了问题 2月22日
  • 创建了问题 2月22日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效