python-docx 遍历文档

python-docx 遍历文档

  • 遍历段落和表格(顶级)
  • 获取段落中的图片
  • 参考资料

遍历段落和表格(顶级)

只有业务场景中需要严格按照word文档中段落和表格的顺序遍历时才使用这个方案。
否则直接遍历下面这几个更方便:
段落:doc.paragraphs
表格:doc.tables
图片:doc.inline_shapes

# 导入必要的库
from docx import Document
from docx.oxml.table import CT_Tbl
from docx.oxml.text.paragraph import CT_P
from docx.table import Table
from docx.text.paragraph import Paragraph# 遍历文档中的所有【段落】和【表格】
def get_ele(ele, body):# 如果是表格对象if type(ele) == CT_Tbl:# 创建表格对象table_obj = Table(ele, body)# 打印表格信息,包括行数和列数print(f"表格 |  {table_obj}{len(table_obj.rows)} 行, {len(table_obj.columns)} 列")# 遍历表格中的所有行for row in table_obj.rows:# 打印行的内容,处理合并单元格的情况print(f"单行 | ", " | ".join([c.text.replace('\n', '') + f"{'   ' * c.grid_span}" for c in list(set(row.cells))]), "|")# 如果是段落对象elif type(ele) == CT_P:# 创建段落对象paragraph_obj = Paragraph(ele, body)# 打印段落文本print(f"段落 | ", paragraph_obj.text)# 遍历文档中的所有【节】
def show_section(doc):# 获取文档的主体部分body = doc.element.body# 遍历文档中的所有节for section in doc.sections:# 打印节的类型print("节节 | ", str(section.start_type))# 遍历节中的所有子元素for ele in section.part.element.body.iterchildren():get_ele(ele, body)# 定义一个函数用于展示文档内容
def show_ele(doc):# 获取文档的主体部分body = doc.element.body# 遍历文档中的所有元素for ele in body.iterchildren():get_ele(ele, body)# 定义文档路径
file_path = r"D:\Work\\test.docx"
# 加载文档
doc = Document(file_path)
# 显示文档内容
show_ele(doc)
# show_section(doc)

获取段落中的图片

# 获取段落中的图片对象
def get_picture_list(paragraph):if isinstance(paragraph, Paragraph):ct_p = paragraph._prelated_parts = paragraph.part.related_partspic_path = "./w:r/w:drawing/*[self::wp:inline | self::wp:anchor]/a:graphic/a:graphicData/pic:pic/pic:blipFill/a:blip"return [related_parts.get(b.embed).image for b in ct_p.xpath(pic_path) if b.embed]return []# 获取一组段落中的图片对象
def get_picture_list_4_paragraphs(paragraphs):picture_list = []for paragraph in paragraphs:temp_list = get_picture_list(paragraph)if len(temp_list) > 0:picture_list.extend(temp_list)return picture_list# 显示图片信息
def show_picture(doc):# 获取文档中的所有段落中的图片对象picture_list = []picture_list.extend(get_picture_list_4_paragraphs(doc.paragraphs))# 遍历所有表格的每一个单元格,取图片对象for table in doc.tables:# 已处理的单元格:解决合并单元格重复读取的问题processed_cells = []for row in table.rows:for cell in row.cells:if cell not in processed_cells:temp_list = get_picture_list_4_paragraphs(cell.paragraphs)if len(temp_list) > 0:picture_list.extend(temp_list)processed_cells.append(cell)result = [(f"格式:{p.ext} | "f"大小:{int(len(p.blob) / 1024)} kb | "f"{p.px_width}x{p.px_height} | "f"vert_dpi:{p.vert_dpi} horz_dpi:{p.horz_dpi} | "f"sha1:{p.sha1}") for p in picture_list]print("\n".join(result))# 定义文档路径
file_path = r"D:\\Work\\test.docx"
# 加载文档
doc = Document(file_path)
# 显示内容
show_picture(doc)

参考资料

Python-docx 文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/30341.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端开发之浏览器安全

浏览器安全涉及多方面的威胁与防护,其中XSS(跨站脚本攻击)与CSRF(跨站请求伪造)是最常见的两类安全问题,而中间人攻击与网络劫持也是不容忽视的安全隐患。下面是对这些安全问题的深入分析与防护策略的总结。…

常用损失函数详解:广泛使用的优化约束方法

各类常用损失函数详解:广泛使用的优化约束方法 今天介绍下损失函数,先介绍下我常用的方法SmoothedL1,它是一个平滑的L1 penalty函数,用于处理约束violation。 标准的L1 penalty函数定义为: L 1 ( x ) { 0 , if x ≤ 0 x , if x > 0 …

MySQL经典面试题:谈一谈你对事务的理解

文章目录 📑事务事务的基本概念回滚开启事务的sql语句 事务的基本特性总结一下涉及到的三个问题 ☁️结语 📑事务 事务的基本概念 事务是用来解决一类特定场景的问题的,在有些场景中,完成某个操作,需要多个sql配合完…

解决header加了固定定位以后,原来页面的锚点链接位置不准确的问题

在网页设计中&#xff0c;当头部&#xff08;header&#xff09;使用了固定定位&#xff08;CSS中的position: fixed;&#xff09;&#xff0c;它将脱离文档流并且固定在视口的顶部或指定位置。这可能导致页面上的锚点链接&#xff08;使用<a href"#id">形式&a…

C++语法18 while循环、循环中断break与继续continue

语法阶段已经更新到第18章了&#xff0c;前面的知识你都学会了吗&#xff1f;如果还没有学习前面的知识&#xff0c;请点击&#x1f449;语法专栏进行学习哦&#xff01; 目录 while循环 while 死循环 训练&#xff1a;折纸 解析 参考代码 训练&#xff1a;第几项 解析 …

CPN IDE实现分层效果

Shift键鼠标选中要分层的库所和变迁&#xff01;然后create subpage。 Subpage是这样的&#xff0c;不会像CPN tools里面自动生成IN和OUT库所&#xff0c;但是也能正确运行。 虽然父页面在运行中有标红&#xff1a;"port not defined" 错误通常意味着在模型中有一些连…

【QT5】<重点> QT多线程

文章目录 前言 一、QThread创建多线程 二、QMutex基于互斥量的同步 三、QReadWriteLock线程同步 四、QWaitCondition线程同步 五、QSemaphore基于信号量的同步 前言 本篇记录学习QT多线程的知识&#xff0c;参考视频13.1QThread创建多线程程序_哔哩哔哩。若涉及版权问题…

用于测试高精度恒流源电路

目前音圈马达在测试方面并没有专用的工具&#xff0c;只有常规的驱动芯片,针对这一问题设计一种高精度恒流源电路&#xff0c;能够对音圈马达的行程、线性度、磁滞、斜率等参数进行测试&#xff0c;和对音圈马达进行寿命实验。 系统主要包括微处理器、D/A转换、A/D转换、运放恒…

单元测试很难么?

前言 你可能会用单元测试框架&#xff0c;python的unittest、pytest&#xff0c;Java的Junit、testNG等。 那么你会做单元测试么&#xff01;当然了&#xff0c;这有什么难的&#xff1f; test_demo.py def inc(x): return x 1 def test_answer(): assert inc(3) 4 i…

经验分享,CRC(循环冗余校验)在线计算

这里分享一个好用的在线计算CRC的网站。 网址&#xff1a;http://www.ip33.com/crc.html 截图&#xff1a;

Ubuntu22.04系统安装及配置

文章目录 一、选择“安装” 二、选择“语言” 三、安装器更新 四、键盘布局 五、选择安装类型 六、网络配置 七、代理设置 八、镜像地址 九、磁盘划分 十、设置用户名、主机名、登录密码 十一、升级到Ubuntu Pro 十二、SSH设置 十三、选装软件包 十四、开始安装进…

灰度图像直方图均衡化

文章目录 1.实验目的2.需求3.代码4.实验结果 1.实验目的 了解一种最基本的图像增强技术&#xff0c;本质上是对灰度图像进行灰度变换。 2.需求 对给定图像进行灰度直方图展示&#xff0c;然后均衡化后再次展示 3.代码 import cv2 as cv import numpy as np from matplotli…

git常见错误

refusing to merge unrelated histories 如果git merge合并的时候出现refusing to merge unrelated histories的错误&#xff0c;原因是两个仓库不同而导致的&#xff0c;需要在后面加上--allow-unrelated-histories进行允许合并&#xff0c;即可解决问题。 git push origin …

类注释规范

类注释规范 1.1.1 模板配置 模板路径&#xff1a;File–>settings–>Editor–>File and Code Templates–>Includes–>File Header  N A M E &#xff1a;设置类名&#xff0c;与下面的 {NAME}&#xff1a;设置类名&#xff0c;与下面的 NAME&#xff1a;设…

【TB作品】MSP430G2553,单片机,口袋板, 多路温度巡回检测仪的设计

题7 多路温度巡回检测仪的设计 设计一个多路温度检测仪&#xff0c;共有8个测温点&#xff0c;每个点连续检测8次&#xff0c;以平均值代表该点温度&#xff0c;并轮流在LED显示器上显示。测试检测元件为铂热电阻Pt1000, 温度测量范围为100℃ ——500℃&#xff0c;测量精度为1…

如何做电子骑缝章?

制作电子骑缝章的过程可以依据不同情况和所使用的工具而有所不同&#xff0c;但基本思路是确保印章能够跨过页面接缝&#xff0c;以验证文档的完整性。以下是几种常见的方法&#xff1a; 使用专业电子合同平台 选择平台&#xff1a;首先&#xff0c;确保你使用的电子合同平台…

Pointnet++改进即插即用系列:全网首发HeatBlock高计算效率和全局接受野|即插即用,提升特征提取模块性能

简介:1.该教程提供大量的首发改进的方式,降低上手难度,多种结构改进,助力寻找创新点!2.本篇文章对Pointnet++特征提取模块进行改进,加入HeatBlock,提升性能。3.专栏持续更新,紧随最新的研究内容。 目录 1.理论介绍 2.修改步骤 2.1 步骤一 2.2 步骤二 2.3 步骤三 1.…

Jlink下载固件到RAM区

Jlink下载固件到RAM区 准备批处理搜索exe批处理调用jlink批处理准备jlink脚本 调用执行 环境&#xff1a;J-Flash V7.96g 平台&#xff1a;arm cortex-m3 准备批处理 搜索exe批处理 find_file.bat echo off:: 自动识别脚本名和路径 set "SCRIPT_DIR%~dp0" set &qu…

【0008day】Shiny的介绍

介绍&#xff1a;Shiny 是一个开源 R 包&#xff0c;它提供了一个优雅而强大的 Web 框架&#xff0c;用于使用 R 构建 Web 应用程序。Shiny 可以帮助您将分析转变为交互式 Web 应用程序&#xff0c;而无需 HTML、CSS 或 JavaScript 知识。 # download R package pkgtest <-…

什么是自动驾驶中的CopyCat?

"CopyCat"这个词通常有两个含义: 字面意思:它可以指一个模仿别人的人,就像猫一样模仿其他猫的行为。在日常用语中,如果有人说某人是个"copycat",他们可能是在说这个人缺乏原创性,总是模仿别人的想法、风格或者行为。 心理学和犯罪学中的含义:在心…