python-docx仅支持.docx格式,不支持.doc;其paragraphs仅含正文段落,不含标题、表格、页眉页脚等;提取纯文本需过滤空段落并逐run拼接,保留格式需遍历runs。

用 python-docx 读取 .docx 文件的正文内容
python-docx 是处理 Word 文档最常用的库,但它只支持 .docx(Office Open XML 格式),不支持旧版 .doc。如果你打开的是 Word 2007 及以后保存的文件,它能可靠提取段落、表格、样式等结构化正文。
- 安装:
pip install python-docx -
Document对象的.paragraphs属性返回所有段落对象,每个段落的.text是纯文本内容(不含格式) - 表格需单独遍历:
doc.tables,再用table.rows[i].cells[j].text获取单元格内容 - 注意:页眉/页脚、批注、文本框中的内容默认不会出现在
.paragraphs中,需要额外访问section.header或section.footer
用 olefile + docx2python 提取 .doc 和 .docx 的元数据
标准 python-docx 不提供创建时间、作者、修订次数等文档属性。这些信息藏在 OLE 复合文档结构(.doc)或 OPC 包(.docx)的元数据流中。直接读取容易出错,推荐用 docx2python —— 它底层调用 olefile(对 .doc)和 zipfile(对 .docx),统一暴露 .metadata 字典。
- 安装:
pip install docx2python - 调用:
docx2python("example.docx").metadata返回字典,含author、created、last_modified_by、revision等字段 - 对
.doc文件同样有效,但部分老版本 Word 生成的.doc可能缺少完整属性,created可能为空 - 注意:
docx2python返回的文本是带层级结构的嵌套列表(如[["段落1"], ["表格行1", ["单元格1", "单元格2"]]]),不是扁平字符串,需递归展平才能当正文用
遇到“Unsupported format”错误时怎么排查
常见报错 ValueError: Unsupported format 或 OleFileIOError: Not a valid OLE file 通常不是文件损坏,而是格式误判。
快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。
- 先确认扩展名和真实格式是否一致:用
file example.doc(Linux/macOS)或 PowerShell 的Get-Item example.doc | Get-Content -Encoding Byte -TotalCount 4查看文件头 ——.doc开头是D0 CF 11 E0,.docx是50 4B 03 04(ZIP 格式) - 用户双击另存为“Word 97-2003 文档”,但实际保存成
.docx(扩展名错);或用 WPS 保存时默认勾选“兼容模式”,生成的是伪.doc - 如果确定是
.docx却被当成.doc处理,检查是否误用了olefile直接打开 ——.docx必须用zipfile解压,不能走 OLE 流程
需要保留格式(如加粗、颜色)时别依赖 text 属性
.paragraph.text 是纯文本快照,丢弃所有格式信息。如果要识别加粗、斜体、字体颜色或超链接,必须逐个 run 遍历。
- 每个
paragraph包含.runs列表,每个run对应一段连续格式相同的文本 - 判断加粗:
run.bold is True;颜色:run.font.color.rgb(返回RGBColor对象) - 超链接在
paragraph的.hyperlinks属性里(python-docx≥ 0.8.11),不是run的一部分 - 性能提醒:遍历
runs比取.text慢 5–10 倍,仅在真正需要格式时启用
元数据字段名不统一,不同 Word 版本写入的键可能不同(比如 last_saved_by vs last_modified_by),读取前最好用 dict.keys() 看一眼实际有哪些键。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










