python如何解析word文件格式(.docx)
python如何解析word文件格式(.docx)
.docx文件遵从开源的“Office Open XML标准”,这意味着我们能用python的文本操作对它进行操作(实际上PPT和Excel也是)。而且这并不是重复造轮子,因为市面上操作.docx的库限制性非常强:
python-docx是开源的,但不支持高级操作,例如增加批注、修订等。spire.doc支持高级操作,但需要商业许可- 微软开放了word的api接口,但不是跨平台的。只支持win平台,且学习门槛较高
所以我们从开源的标准入手,用python实现操作word文件的功能。
看下图,把.docx文件的后缀手动改为.zip竟然可以直接解压。原来.docx本质上是一个zip压缩包。

解压后的word文件漏出了他的真实面目。原来.docx由很多.xml文件(及其他)组成。注意下图框出的word/document.xml,他是我们操作word文件的主角(有些高级功能不在其中,比如批注在另外的xml中)。因为其中记录了word文档的文本、字体、段落格式等。.xml是一个纯文本文件,理论上我们用python可以操作word/document.xml中定义的任何元素。

解释一下
.xml格式:你可以粗略的把它理解为.html。区别在于.html的标记是预先定义好的,.xml的标记由架构或文档的作者定义,并且是无限制的。如果你没有接触过的话,我建议百度一下,有助于理解下面的内容。
我举个例子来看一下word/document.xml的结构,具体的含义写在注释里了:
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"> # 注意这行,下文要用到!<w:body> # body是文档的主体,是个nodelist,一般只有一个元素<w:p w:rsidR="00F921A6" w:rsidRDefault="00000000"> # p代表paragraph段落<w:pPr> # pPr是段落属性<w:numPr><w:ilvl w:val="255"/><w:numId w:val="0"/></w:numPr><w:pBdr> # 段落边框<w:top w:val="none" w:sz="0" w:space="0" w:color="000000"/><w:left w:val="none" w:sz="0" w:space="0" w:color="000000"/><w:bottom w:val="none" w:sz="0" w:space="7" w:color="000000"/><w:right w:val="none" w:sz="0" w:space="0" w:color="000000"/></w:pBdr><w:widowControl/> # 控制孤行<w:spacing w:line="560" w:lineRule="exact"/> # 行间距<w:ind w:firstLineChars="200" w:firstLine="640"/> # 首行缩进<w:outlineLvl w:val="1"/> # 标题级别<w:rPr> # rPr是段落内的文本属性<w:rFonts w:ascii="方正仿宋_GBK" w:eastAsia="方正仿宋_GBK" w:hAnsi="Times New Roman"/><w:kern w:val="0"/><w:sz w:val="32"/><w:szCs w:val="32"/></w:rPr></w:pPr><w:r> # r代表run,可以理解为连续的文本块<w:rPr> # rPr是文本属性<w:rFonts w:ascii="方正楷体_GBK" w:eastAsia="方正楷体_GBK" w:hAnsi="Times New Roman" w:hint="eastAsia"/> # 字体<w:kern w:val="0"/> # 字间距<w:sz w:val="32"/> # 字号<w:szCs w:val="32"/> # 字号?不知道</w:rPr><w:t>这是一段word中的文本</w:t> # t是文本</w:r></w:p></w:body>
</w:document>
注意看上面xml的第一行,xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"定义了document及其子元素的命名空间。xmlns用来声明属性,比如这里xmlns:w代表绑定了w为前缀,那么子元素中所有前缀为w的都绑定到命名空间"http://schemas.openxmlformats.org/wordprocessingml/2006/main"。为什么要着重讲命名空间呢?因为docx的前缀不是统一的,比如Microsoft Word一般用w,但是wps就不用w了,记得在操作之前先确定命名空间。
以上只是举个列子,实际上各种标记种类和用法非常多。具体的标记用法参考OOXML标准,你可以在下图画红框的地方查找(仅适用于Microsoft Word)。
OOXML标准的中文翻译:https://hellowac.github.io/ecma-376-zh-cn/
本文言尽于此,后面我会再把python的源码开放出来。
1.17更新:源码不放了,python-doc支持修订和批注了。
相关文章:
python如何解析word文件格式(.docx)
python如何解析word文件格式(.docx) .docx文件遵从开源的“Office Open XML标准”,这意味着我们能用python的文本操作对它进行操作(实际上PPT和Excel也是)。而且这并不是重复造轮子,因为市面上操作.docx的…...
「刘一哥GIS」系列专栏《GRASS GIS零基础入门实验教程(配套案例数据)》专栏上线了
「刘一哥GIS」系列专栏《GRASS GIS零基础入门实验教程》全新上线了,欢迎广大GISer朋友关注,一起探索GIS奥秘,分享GIS价值! 本专栏以实战案例的形式,深入浅出地介绍了GRASS GIS的基本使用方法,用一个个实例讲…...
使用nginx搭建通用的图片代理服务器,支持http/https/重定向式图片地址
从http切换至https 许多不同ip的图片地址需要统一进行代理 部分图片地址是重定向地址 nginx配置 主站地址:https://192.168.123.100/ 主站nginx配置 server {listen 443 ssl;server_name localhost;#ssl证书ssl_certificate ../ssl/ca.crt; #私钥文件ssl_ce…...
零基础构建最简单的 Tauri2.0 桌面项目 Star 88.4k!!!
目录 预安装环境 安装nodejs windows下安装 linux下安装 nodejs常遇问题 安装C环境 介绍 下载 安装 安装Rust语言 Tauri官网 安装 vscode 安装 rust 插件 安装 Tauri 插件 运行成果 预安装环境 安装nodejs windows下安装 NodeJs_安装及下载_哔哩哔哩_bilibi…...
智能科技与共情能力加持,哈曼重新定义驾乘体验
2025年1月6日,拉斯维加斯,2025年国际消费电子展——想象一下,当您步入一辆汽车,它不仅能响应您的指令,更能理解您的需求、适应您的偏好,并为您创造一个独特且专属的交互环境。作为汽车科技领域的知名企业和…...
猫贫血吃什么能快速补血?
各位铲屎官们,看到自家猫咪无精打采、小脸苍白,是不是特别心疼?贫血可是猫咪健康的大敌,今天就来给大家支支招,哪些食物和方法能让猫咪快速补血,恢复活力! 一、红肉及内脏类 红肉是补血的“主力…...
微服务拆分
微服务拆分 接下来,我们就一起将黑马商城这个单体项目拆分为微服务项目,并解决其中出现的各种问题。 熟悉黑马商城 首先,我们需要熟悉黑马商城项目的基本结构: 大家可以直接启动该项目,测试效果。不过,…...
Android SystemUI——车载CarSystemUI加载(八)
Android 系统早期的状态栏和导航栏对于手机设备来说那是相当重要的,但是随着手机版本的不断更新,状态栏和导航栏对于手机的重要性在逐渐降低,特别是在快捷手势出现之后,导航栏几乎变得可有可无。但是对于当前如火如荼的车载系统来说,状态栏和导航栏却几乎是必备的,谷歌自…...
2025年编程语言热度分析:Python领跑,Go与Rust崛起
TIOBE Index(TIOBE 编程语言指数)是一个衡量编程语言流行度的排名系统。它通过分析多种搜索引擎、在线编程社区、技术论坛、问答网站(如 Google、Bing、Yahoo、Wikipedia、Stack Overflow)等的搜索和讨论数据,评估不同…...
前缀和 (一维 二维)
前缀和作用: 快速求出原数组中一段数组的和 思路 1.预处理前缀和数组 2.用公式求区间和 公式: 二维前缀和: s [ i ] [ j ] s[ i - 1 ] [ j ] s[ i ] [ j - 1 ] - s [ i - 1 ] [ j - 1]; 题型 一维 二维 题解 一维 #include <iost…...
精选算法合集
一、BFS相关 1.1 最小步骤 给定一个数组,从第一个开始,正好走到数组最后,所使用的最少步骤数。要求: 第一步从第一元素开始,第一步小于<len/2(len为数组的长度)。从第二步开始,…...
HackMyVM-Klim靶机的测试报告
目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、信息搜集 2、Getshell 3、提权 CVE-2008-0166 四、结论 一、测试环境 1、系统环境 渗透机:kali2021.1(192.168.159.127) 靶 机:debian(192.168.159.27) 注意事…...
C++内存分布
小试牛刀: int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)malloc(sizeof(int)…...
mysql主从复制sql进程中断,报错Tablespace is missing for table ……
一 解决办法 关键执行1.2步,1.1/1.3结合实际环境操作。 1.1 如果从库只读开启了,要先关闭只读 show variables like %read_only%; set global super_read_onlyoff; set global read_onlyoff; 1.2 discart/import tablespace ALTER TABLE 表名 DISC…...
STM32 FreeRTOS 信号量
信号量的简介 reeRTOS中的信号量是一种用于任务间同步和资源管理的机制。信号量可以是二进制的(只能取0或1)也可以是计数型的(可以是任意正整数)。信号量的基本操作包括“获取”和“释放”。 比如动车上的卫生间,一个…...
Codemirror6个人使用心得总结
Codemirror6 包 用法总结 本次用到的 Codemirror6 有关的包如下 语法支持包语法支持包核心插件codemirror/lang-yaml 6.1.1codemirror/lang-less 6.0.2codemirror/autocomplete 6.16.0codemirror/lang-xml 6.1.0codemirror/lang-liquid 6.2.1codemirror/commands 6.5.0codemirr…...
Ruby语言的软件开发工具
Ruby语言的软件开发工具概述 引言 Ruby是一种高效、灵活的动态编程语言,因其简洁的语法和强大的功能而受到开发者的欢迎。在软件开发过程中,使用合适的开发工具可以大幅提高工作效率,提升代码质量。本文将详细介绍一些常用的Ruby开发工具&a…...
OpenHarmony API 设计规范
OpenHarmony API 设计规范 修订记录 版本作者时间更新内容v0.1,试运行版OpenHarmony API SIG2022年11月初版发布 目的 API是软件实现者提供给使用者在编程界面上的定义,API在很大程度上体现了软件实体的能力范围。 同时,API定义的好坏极…...
ESP8266 AP模式 网页配网 arduino ide
ESP8266的AP配网,可以自行配置网络,一个简单的demo,文档最后有所有的代码,已经测试通过. 查看SPIFFS文件管理系统中的文件 账号密码是否存在,如不存在进入AP配网,如存在进入wifi连接模式 // 检查Wi-Fi凭据if (isWiFiConfigured()) {Serial.println("找到Wi-Fi凭据&#…...
OpenCV基础:获取子矩阵的几种方式
目录 相关阅读 方法一:使用切片操作 方法二:使用高级索引 方法三:使用条件筛选 方法四:使用 numpy 的 take 函数 相关阅读 OpenCV基础:矩阵的创建、检索与赋值-CSDN博客 OpenCV基础:图像运算-CSDN博客…...
为什么很多人学 Django 会懵?因为没搞懂 MVC 和 MTV 的真正区别
很多刚接触 Django 的开发者,甚至包括不少测试工程师,在学习 Django 时都会遇到一个困惑:为什么 Django 不叫 MVC,而是 MTV?更奇怪的是:很多教程还会说:“Django 的 MTV 其实就是 MVC。”这句话…...
GitHub加速工具:解决开发者访问难题的终极方案
GitHub加速工具:解决开发者访问难题的终极方案 【免费下载链接】fetch-github-hosts 🌏 同步github的hosts工具,支持多平台的图形化和命令行,内置客户端和服务端两种模式~ | Synchronize GitHub hosts tool, support multi-platfo…...
如何使用Postman,通过Mock的方式测试我们的API
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 这篇文章将教会大家如何利用 postman,通过 Mock 的方式测试我们的 API。什么是 MockMock 是一项特殊的测试技巧,可以在没有依赖项的情况下进…...
PyTorch实战(38)——深度学习模型可解释性
PyTorch实战(38)——深度学习模型可解释性0. 前言1. PyTorch 模型可解释性2. 训练手写数字分类器3. 可视化模型卷积核4. 可视化特征图小结系列链接0. 前言 在本专栏中,我们已经构建了多种深度学习模型来完成不同任务,包括手写数字…...
python基于微信小程序的旅游攻略分享平台
目录需求分析与功能规划技术架构设计数据库设计接口开发小程序前端开发部署与测试运营与迭代注意事项项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作需求分析与功能规划 明确平台核心功能:用户注册登录、攻略发布与…...
MultiHighlight插件深度解析:掌握代码高亮的艺术与科学
MultiHighlight插件深度解析:掌握代码高亮的艺术与科学 【免费下载链接】MultiHighlight Jetbrains IDE plugin: highlight identifiers with custom colors 🎨💡 项目地址: https://gitcode.com/gh_mirrors/mu/MultiHighlight 在复杂…...
告别手动画框!OrCAD Capture 快速创建复合封装(附电源/地引脚处理技巧)
高效创建OrCAD复合封装的进阶技巧与避坑指南 在PCB设计流程中,原理图封装的创建往往是项目前期最耗时的环节之一。尤其是面对多通道运放、复杂电源管理芯片或模块化器件时,传统的手动绘制方式不仅效率低下,还容易因引脚属性设置不当导致后续D…...
从零到上线:用Vue3+AntV G2快速搭建企业级数据大屏
从零到上线:用Vue3AntV G2快速搭建企业级数据大屏 在数字化转型浪潮中,数据可视化已成为企业决策的重要支撑。想象这样一个场景:会议室里,高管们围坐在大屏前,实时业务数据通过动态图表清晰呈现,关键指标一…...
OpCore-Simplify:智能化解构OpenCore EFI配置难题,让黑苹果安装不再复杂
OpCore-Simplify:智能化解构OpenCore EFI配置难题,让黑苹果安装不再复杂 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为…...
为什么你的Mojo-Python FFI在M1芯片上必崩?苹果Silicon专属ABI陷阱与跨架构符号绑定修复指南(含Clang插件源码)
第一章:为什么你的Mojo-Python FFI在M1芯片上必崩?Mojo-Python FFI(Foreign Function Interface)在 Apple M1 及后续 ARM64 架构芯片上崩溃,根源并非配置疏忽,而是底层 ABI 不兼容与运行时符号解析机制的双…...
