用 Python 解析 Word 文档时怎么配置环境和处理常见格式

先确认你的 Word 文件到底是哪种格式

Word 解析配置的第一步不是装库,而是分清文件格式。.docx 是 Office 2007 之后基于 XML 的压缩包格式,.doc 是更早的二进制格式。
两者差异很大,python-docx 只能读 .docx,读 .doc 会直接报错。

判断方法很简单,在文件所在目录执行:

file 报告.docx
file 旧文档.doc

输出含 Microsoft Word 2007+ 或 Zip archive 的是 .docx;
输出 Composite Document File 的是老式 .doc。
后者要先转换,Linux 上可用 LibreOffice:

libreoffice --headless --convert-to docx 旧文档.doc

转换后再走后面的解析流程。
这一步没做对,后面的报错基本都是白费功夫。

安装解析库并跑通最小示例

主流程用 python-docx,它更适合按结构取段落和表格。
建议在虚拟环境里装,避免污染系统 Python:

python3 -m venv wordenv
source wordenv/bin/activate
pip install python-docx

最小验证脚本如下,先确认能打开文件再谈批量处理:

from docx import Document

doc = Document("报告.docx")
print("段落数:", len(doc.paragraphs))
print("表格数:", len(doc.tables))
for p in doc.paragraphs[:5]:
    if p.text.strip():
        print(repr(p.text))

预期结果是打印出段落总数、表格总数和前几段文本。
如果这里就报 PackageNotFoundError,说明文件不是合法 .docx 或路径写错,回到第一步检查格式。

按结构取内容而不是只取纯文本

doc.paragraphs 只覆盖正文段落,页眉、页脚、表格里的文字不会被它包含。
如果只是做全文检索,可以用 docx2txt 这类库一把梭:

import docx2txt
text = docx2txt.process("报告.docx")

但如果要保留结构,就分别处理。
表格按行列读取:

for table in doc.tables:
    for row in table.rows:
        cells = [c.text.strip() for c in row.cells]
        print("\t".join(cells))

页眉页脚要遍历每个 section:

doc = Document("报告.docx")
for section in doc.sections:
    for p in section.header.paragraphs:
        print("页眉:", p.text)

需要注意,合并单元格在 row.cells 里会重复出现同一段文字,做统计时要按单元格对象去重,否则行数、字数会偏大。

容易踩的几个坑

  • 空段落大量出现:Word 里回车产生的空段落也会被计入 paragraphs,统计前用 if p.text.strip() 过滤。
  • 中文乱码:python-docx 读的是 XML 文本,正常不会乱码;出现乱码多半是文件被加密或损坏,先用 Word 或 LibreOffice 打开另存一次。
  • 文档被占用:Windows 下文件正被 Word 打开时读取可能失败,批量脚本前先确保文件已关闭。
  • 老式 .doc 直接报错:这不是库的 bug,是格式不支持,按第一节先转换。

用可核对的数字确认解析成功

解析完不要只看“没报错”。
建议做一次交叉验证:用 Word 或 LibreOffice 打开原文件,核对段落数、表格数是否和脚本输出一致;
再抽一段含中文、英文、数字的文本,确认提取结果与原文逐字相同。
批量处理时,把每个文件的段落数、表格数、字符数写进日志,出现异常文件能快速定位。

如果后续要把解析结果接入检索或知识库,可继续参考站内用 Apache Tika 处理 PDF 和 Word 的配置方法,按实际格式选择合适的解析引擎。

分享到:
上一篇
用 pdftotext 和 Python 把 PDF 批量转成可检索文本的配置方法
下一篇
Excel 解析配置怎么设置:用 Python 读取表格的实操步骤
1
系统公告

关于香港云优质服务器IP地址更换的通知

尊敬的客户: 因原IP运营商大幅涨价,为避免成本转嫁至用户,我司决定更换IP服务商。本次更换后,您的续费价格将保持不变,且新IP网络质量与服务标准不受影响。新IP已分配至后台,即刻生效(更换的新IP都是香港原生IPv4)。 涉及 IP 段: 45.192.x.x 旧 IP 停用时间: 2026 年 12 月 1 日
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意