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

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日

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题