Word文档处理:用Python轻松提取Word文档图文数据

将内容从Word文档中提取出来可以方便我们对其进行其他操作,如储将内容存在数据库中、将内容导入到其他程序中、用于AI训练以及制作其他文档等。使用Spire.Doc for Python提供了一个简单的方法直接提取Word文档中的文本内容,包括文本和图片,而不需要大量的复制粘贴操作,也不需要复杂的代码。本文将介绍如何使用简单的代码实现从Word文档中提取文本和图片内容并保存。

  • 从Word文档中提取文本内容并写入TXT文件
  • 从Word文档中提取图片并保存

引入Spire.Doc for Python

使用此工具操作Word文档之前,需要先将其引入到项目中。可以从Spire.Doc for Python官方网站下载,或直接pip安装。代码如下:

pip install Spire.Doc

从Word文档中提取文本内容并写入TXT文件

Spire.Doc for Python中的Document.GetText()方法可以获取Word文档中的所有文本并返回字符串,我们可以将返回的字符串写入到文本文件中进行保存。操作步骤如下:

  • 创建 Document 的对象。
  • 使用 Document.LoadFromFile() 方法载入Word文档。
  • 使用 Document.GetText() 方法获取文档中的文本。
  • 将获取的文本写入文本文件。

代码示例

from turtle import st
from spire.doc import *
from spire.doc.common import *def WriteAllText(fname:str,text:List[str]):fp = open(fname,"w")for s in text:fp.write(s)fp.close()inputFile = "示例.docx"
outputFile =  "获取的文本.txt"#创建Document的对象
document = Document()#载入Word文档
document.LoadFromFile(inputFile)#获取文档中的文本
text = document.GetText()#将文本写入文本文件
WriteAllText(outputFile, text)
document.Close()

提取结果
从Word文档中提取文本内容

从Word文档中提取图片并保存

提取图片的操作相对复杂一些,需要判断文档元素子对象是否为图片或复合对象,如果是图片则保存,如果是复合对象则继续判断其中的子对象是否为图片。操作步骤如下:
创建文档对象

  • 创建 Document 的对象。
  • 使用 Document.loadFromFile() 方法加载 Word 文档。
  • 创建一个复合对象队列并将文档元素放入其中。
  • 创建一个列表来存储提取的图像。
  • 遍历文档元素,并通过遍历每个节点的子对象来检查是否为复合对象或图片对象。
  • 检查子元素是否为图片对象。如果是,则提取其图像数据并将其添加到提取的图像列表中。
  • 检查子元素是否为图片对象。如果是,则将其添加到队列中,继续判断。
  • 保存图片到文件夹。

代码示例

import queue
from spire.doc import *
from spire.doc.common import *
import osoutputPath = "Images/"
inputFile = "示例.docx"if not os.path.exists(outputPath):os.makedirs(outputPath)#创建Document的对象
document = Document()#载入Word文档
document.LoadFromFile(inputFile)#创建一个队列并将文档元素放入其中
nodes = queue.Queue()
nodes.put(document)#创建一个列表
images = []#循环遍历文档元素
while nodes.qsize() > 0:node = nodes.get()for i in range(node.ChildObjects.Count):#获取文档元素的子对象child = node.ChildObjects.get_Item(i)#判断子对象是否为图片if child.DocumentObjectType == DocumentObjectType.Picture:picture = child if isinstance(child, DocPicture) else NonedataBytes = picture.ImageBytes#添加到列表中images.append(dataBytes)#判断子对象是否为复合对象elif isinstance(child, ICompositeObject):#添加到队列中nodes.put(child if isinstance(child, ICompositeObject) else None)#保存图片
for i, item in enumerate(images):fileName = "Image-{}.png".format(i)with open(outputPath+fileName,'wb') as imageFile:imageFile.write(item)
document.Close()

提取结果
从Word文档中提取图片

以上是关于如何使用Spire.Doc for Python从Word文档中提取文本和图片的介绍。Spire.Doc for Python还支持非常多的文档操作,可以前往官网了解,也可以前往Spire.Doc论坛参与讨论。

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

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

相关文章

【Linux】重定向|重新理解Linux下一切皆文件

文章目录 一、什么是重定向输出重定向的原理认识一下输出重定向的系统调用输出重定向的另外写法 二、浅谈输入重定向三、重定向和进程替换有冲突吗四、Linux下一切皆文件总结 一、什么是重定向 理解重定向之前:先理解一个叫做文件描述符的具体操作。 文件描述符&a…

【Qt之QWizardPage】使用

介绍 QWizardPage类是向导页面的基类。 QWizard表示一个向导。每个页面都是一个QWizardPage。当创建自己的向导时,可以直接使用QWizardPage,也可以子类化它以获得更多控制。 页面具有以下属性,由QWizard呈现:a title,…

JVM虚拟机-虚拟机执行子系统-第6章 字节码指令

字节码指令 Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需的参数(称为操作数,Operand)构成。 字节码与数据类型 在Java虚拟…

uni-app 蓝牙打印, CPCL指令集使用

先上代码: GitHub - byc233518/uniapp-bluetooth-printer-demo: 使用uniApp 连接蓝牙打印机 Demo, CPCL 指令简单实用示例 (内含 芝珂,佳博,精臣 多个厂家指令集使用文档) 文件结构: ├── App.vue ├── CPCL 指令手册.pdf // 指令集参考手册 ├── LICENSE ├── R…

基于探路者算法优化概率神经网络PNN的分类预测 - 附代码

基于探路者算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于探路者算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于探路者优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络…

建造者模式(创建型)

目录 一、前言 二、建造者模式 三、链式编程实现建造者模式 四、总结 一、前言 当我们开发一个软件应用时,我们通常需要创建各种对象。有些对象是简单的,可以直接实例化,但有些对象则比较复杂,需要多个步骤才能创建完成。这时…

【备忘】websocket学习之挖坑埋自己

背景故事 以前没有好好学习过websocket,只知道它有什么用途,也知道是个好东西,平时在工作中没用过,所以对它并不知所以然。如今要做个自己的项目,要在付款的时候实时播报声音。自己是个开发者,也不想用别人…

解决升级docker导致的k8s崩溃问题

最近由于安装harbor升级了docker,然后发现k8s集群就启动不了。 查看kubelet日志发现:直接连不上apiserver了,直接connection refused 然后尝试启动apiserver容器直接报错:Error response from daemon: unknown or invalid runtim…

【原创】java+swing+mysql校园活动管理系统设计与实现

前言: 本文介绍了一个校园活动管理系统的设计与实现。该系统基于JavaSwing技术,采用C/S架构,使用Java语言开发,以MySQL作为数据库。系统实现了活动发布、活动报名、活动列表查看等功能,方便了校园活动的发布和管理&am…

线性表的概念

目录 1.什么叫线性表2.区分线性表的题 1.什么叫线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是…

餐厅订座预约小程序的效果如何

市场中无论哪种城市,餐厅非常多,一条不长的商业街,汇聚着数家餐饮品牌,且相互间竞争激烈,并且各个商家都希望用成本低高效率的方法引流及转化。 随着互联网深入各个行业,传统餐饮行业经营痛点不少。 传统餐…

前端---CSS的样式汇总

文章目录 CSS的样式元素的属性设置字体设置文字的粗细设置文字的颜色文本对齐文本修饰文本缩进行高设置背景背景的颜色背景的图片图片的属性平铺位置大小 圆角矩形 元素的显示模式行内元素和块级元素的转化弹性布局水平方向排列方式:justify-content垂直方向排序方式…

基于深度学习的活体人脸识别检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1. 活体人脸识别检测算法概述 4.2. 深度学习在活体人脸识别检测中的应用 4.3. 算法流程 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 …

分形图案是什么?fpmarkets这样进入市场

分形图案的构造相对简单。市场在某个时间段内,会呈现单向的变动,要么持续上涨,要么持续下跌。观察这种趋势,并预测市场将呈现上涨态势后,过了一段时间,当所有有意向的买家都已经完成购买行为(即在价格上涨过…

EasyPOI实现excel文件导出

EasyPOI真的是一款非常好用的文件导出工具&#xff0c;相较于传统的一行一列的数据导出&#xff0c;这种以实体类绑定生成的方式真的非常方便&#xff0c;也希望大家能够了解、掌握其使用方法&#xff0c;下面就用一个实例来简单介绍一下EasyPOI的使用。 1.导入依赖 <!-- e…

C语言每日一题(31)相交链表

力扣160.相交链表 题目描述 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意…

新手老师怎么发布班级查询?

现在科技发展飞快&#xff0c;班级查询系统已经成为了许多学校必备的教务工具。可以让学生们快速查找到班级的各项信息&#xff0c;包括但不限于课程安排、考试成绩、分班等。对老师来说&#xff0c;班级查询系统可以提高工作效率&#xff0c;减少重复劳动&#xff0c;学生或者…

基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码

基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于蝠鲼觅食优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

ubuntu中cuda12.1配置(之前存在11.1版本的cuda)(同时配置两个版本)

ubuntu中cuda12.1配置 由于YOLOv8项目中Pytorch版本需要cuda12.1版本 在官网下载12.1版本的deb包 官网地址 sudo dpkg -i cuda-keyring_1.0-1_all.deb sudo apt-get update sudo apt-get -y install cuda然后需要修改bashrc文件&#xff08;隐藏文件&#xff09; 添加 exp…

关系代数、SQL语句和Go语言示例

近些年&#xff0c;数据库领域发展日新月异&#xff0c;除传统的关系型数据库外&#xff0c;还出现了许多新型的数据库&#xff0c;比如&#xff1a;以HBase、Cassandra、MongoDB为代表的NoSQL数据库&#xff0c;以InfluxDB、TDEngine为代表的时序数据[1]库&#xff0c;以Neo4J…