将内容从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文档中提取图片并保存
提取图片的操作相对复杂一些,需要判断文档元素子对象是否为图片或复合对象,如果是图片则保存,如果是复合对象则继续判断其中的子对象是否为图片。操作步骤如下:
创建文档对象
- 创建 Document 的对象。
- 使用 Document.loadFromFile() 方法加载 Word 文档。
- 创建一个复合对象队列并将文档元素放入其中。
- 创建一个列表来存储提取的图像。
- 遍历文档元素,并通过遍历每个节点的子对象来检查是否为复合对象或图片对象。
- 检查子元素是否为图片对象。如果是,则提取其图像数据并将其添加到提取的图像列表中。
- 检查子元素是否为图片对象。如果是,则将其添加到队列中,继续判断。
- 保存图片到文件夹。
代码示例
import queue
from spire.doc import *
from spire.doc.common import *
import os
outputPath = "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 None
dataBytes = 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()
提取结果
以上是关于如何使用Spire.Doc for Python从Word文档中提取文本和图片的介绍。Spire.Doc for Python还支持非常多的文档操作,可以前往官网了解,也可以前往Spire.Doc论坛参与讨论。