使用 Python 精准提取 Word 文档中的文本与表格

在数据处理任务中,从 Word 文档中提取结构化内容(尤其是文本和表格)是一项高频需求。Python 生态中虽然有许多库(如 python-docx),但当文档排版复杂、或需要同时处理表格与正文时,Spire.Doc for Python 提供了更稳定、功能更全面的解决方案。本文将带您一步步实现 Word 文本提取(并写入 TXT 文件)以及表格数据的自动导出。

一、准备工作

Spire.Doc for Python 是一个功能强大的 Word 操作库,支持 .doc / .docx 等多种格式。安装非常简单:

复制代码
pip install spire.doc

二、提取全部文本并写入 TXT 文件

原始的 GetText() 方法仅将文本打印到控制台。在实际工作中,我们通常需要将内容持久化保存。下面的代码修改为读取 Word 全文,并将其写入指定的 .txt 文件中:

复制代码
from spire.doc import *
from spire.doc.common import *

# 创建 Document 对象并加载 Word 文件
doc = Document()
doc.LoadFromFile("input.docx")

# 获取整个文档的纯文本内容
full_text = doc.GetText()

# 将文本写入 txt 文件
with open("output.txt", "w", encoding="utf-8") as file:
    file.write(full_text)

doc.Close()
print("文本提取完成,已保存至 output.txt")

代码要点说明

  • GetText() 会按阅读顺序提取段落、标题、页眉页脚等所有文本内容,但忽略图片、图形等元素。
  • 写入时指定 utf-8 编码,确保中文不出现乱码。
  • 操作完成后调用 doc.Close() 释放资源。

三、精确提取并导出所有表格

Word 中的表格往往承载着关键数据(如报表、清单)。Spire.Doc 提供了层次清晰的 API:文档 → 节(Section) → 表格(Table) → 行 → 单元格 → 段落。以下代码会遍历每个节中的所有表格,将每个表格单独保存为一个 .txt 文件(以制表符分隔,便于后续导入 Excel):

复制代码
from spire.doc import *
from spire.doc.common import *
import os

# 创建输出文件夹
output_dir = "output/Tables"
os.makedirs(output_dir, exist_ok=True)

# 加载 Word 文档
doc = Document()
doc.LoadFromFile("Sample.docx")

# 遍历所有节
for section_idx in range(doc.Sections.Count):
    section = doc.Sections.get_Item(section_idx)
    tables = section.Tables

    for table_idx in range(tables.Count):
        table = tables.get_Item(table_idx)
        table_data = ""

        # 遍历表格所有行和单元格
        for row_idx in range(table.Rows.Count):
            row = table.Rows.get_Item(row_idx)
            for col_idx in range(row.Cells.Count):
                cell = row.Cells.get_Item(col_idx)
                # 收集单元格内所有段落文本
                cell_text = ""
                for para_idx in range(cell.Paragraphs.Count):
                    cell_text += cell.Paragraphs.get_Item(para_idx).Text + " "
                table_data += cell_text.strip()
                # 列之间用制表符分隔
                if col_idx < row.Cells.Count - 1:
                    table_data += "\t"
            table_data += "\n"   # 行结束

        # 保存当前表格数据
        output_path = f"{output_dir}/WordTable_{section_idx+1}_{table_idx+1}.txt"
        with open(output_path, "w", encoding="utf-8") as f:
            f.write(table_data)
        print(f"已保存:{output_path}")

doc.Close()

代码解析

  • 多层循环确保不会遗漏任何嵌套表格(注意:Spire.Doc 中表格可能嵌套在单元格内,本示例仅处理顶层表格,若需深层嵌套可递归处理)。
  • 单元格内容通过遍历其 Paragraphs 集合获得,避免丢失换行或样式分隔。
  • 输出文件名按"节索引_表索引"命名,清晰可追溯。

四、整合应用与注意事项

1. 性能与内存

对于大文档(数百页),建议按需处理:若只需表格,可跳过文本提取;反之亦然。doc.Close() 必须执行,否则可能造成句柄泄露。

2. 表格合并单元格的处理

当表格存在跨行或跨列合并时,上述代码仍能正常提取每个单元格的文本,但输出的纯文本结构会丢失合并关系。如需保留行列结构,可借助 Cell.ColumnSpanRowSpan 属性构建标记矩阵。

3. 免费版限制

免费版 Spire.Doc 支持处理的文档不能超过 500 段落 + 25 个表格,普通文档基本够用。

五、总结

通过 Spire.Doc for Python,仅需几十行代码即可完成 Word 文本与表格的批量抽取任务。本文提供的两个核心函数:文本写入 TXT 与表格逐表导出,可直接嵌入您的数据处理流水线。结合 Python 的文件操作与后续分析(如 pandas 读取表格 txt),您将能轻松构建文档解析自动化系统。

如果遇到复杂文档布局或表格合并单元格的特殊需求,Spire.Doc 还提供了 ExportToHtmlSaveToFile 等丰富接口,值得深入探索。欢迎在实际项目中灵活运用,让文档处理不再繁琐。

相关推荐
DeepVisionary3 小时前
谷歌 Gemini Omni 1.1 Flash 正式发布:4K 视频、40 秒场景延伸,视频生成进入按 token 计费时代
python·自动化
阡之尘埃3 小时前
Python数据分析案例85——大模型微调全流程(SFT的LoRA微调)
人工智能·python·深度学习·语言模型·llm·微调·千问
海兰3 小时前
【应用】基于 Next.js 16 + Python mplfinance的金融K线图与技术指标可视化平台(三)
javascript·python·金融
EXI-小洲3 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
cvcode_study3 小时前
Ollama+ComfyUI 多模态
大数据·人工智能·python
星核0penstarry5 小时前
试一试用gr.Workflow把AI多步骤串联变成可视化画布
人工智能·python·ai作画·api·ai编程·工作流·api聚合平台
taller_20005 小时前
【005】PiE 与传统 VBA 的核心区别
python·vba·pie·py
海兰5 小时前
【应用】基于 Next.js 16 + Python mplfinance的金融K线图与技术指标可视化平台(一)
javascript·python·金融
大衛說5 小时前
《Python 从入门到精通》系列总览与学习路线
开发语言·python·学习
小猴子爱上树5 小时前
跨境电商翻译工具推荐:批量图片翻译、视频字幕翻译、智能抠图一站式搞定
人工智能·python·音视频