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 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()

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

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

### 将Python代码插入到Microsoft Word文档的方法 将Python代码插入到Microsoft Word文档可以通过多种方式进行实现,以下是几种常见的方法及其具体操作: #### 方法一:手动复制并粘贴 可以直接在支持语法高亮的编辑器(如PyCharm、VS Code 或 Sublime Text)中打开Python代码文件,选中代码后右键复制。随后切换至Microsoft Word文档,使用“保留源格式”的粘贴选项来保持代码的颜色和样式[^1]。 如果需要进一步调整代码的外观,可以利用Word内置的功能设置字体、字号以及背景颜色等属性[^3]。 #### 方法二:借助`python-docx`库自动生成带有样式的Word文档 对于自动化需求较高的场景,可采用`python-docx`库编写脚本来创建包含Python代码的Word文档。以下是一个简单的示例代码,展示如何向Word文档中添加具有特定样式的代码块: ```python from docx import Document from docx.shared import Pt, RGBColor def add_code_block(document, code_text): paragraph = document.add_paragraph() run = paragraph.add_run(code_text) # 设置字体为Courier New以模拟代码风格 font = run.font font.name = 'Courier New' font.size = Pt(10) # 定义代码块的颜色(灰色背景) shading_elm = parse_xml(r'<w:shd {} w:fill="D9D9D9"/>'.format(nsdecls('w'))) paragraph._element.get_or_add_pPr().append(shading_elm) document = Document() code_snippet = """\ def factorial(n): if n == 0 or n == 1: return 1 else: return n * factorial(n - 1) """ add_code_block(document, code_snippet) document.save("example_with_code.docx") ``` 此代码片段定义了一个函数 `add_code_block()` 来往Word文档中加入一段预设样式的Python代码,并保存最终的结果作为新的`.docx` 文件[^1]。 #### 方法三:通过Win32 COM接口嵌入复杂内容 当涉及到更复杂的交互时,比如从其他应用程序(如Visio)提取图像并与文本混合排列,则可能需要用到Windows下的COM组件服务。下面给出一个基于前面提到的技术栈的例子说明怎样把外部资源引入Word的同时维持良好的布局控制[^2]: ```python import win32com.client as win32 app_word = win32.DispatchEx('Word.Application') app_word.Visible = True doc = app_word.Documents.Add() rng = doc.Range(0, 0) table = doc.Tables.Add(rng, NumRows=1, NumColumns=1) cell = table.Cell(RowIndex=1, ColumnIndex=1) cell.Range.Text = "这里是表格内的Python代码:\n\n" # 插入实际代码部分 code_line = "print('Hello World')" cell.Range.InsertAfter(f"{code_line}\n") doc.SaveAs(os.path.join(os.getcwd(), "complex_example.docx")) ``` 以上程序展示了如何构建一个基本框架用于管理更加精细的内容编排过程,包括但不限于图文混排等情况[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值