python-docx` 仅支持 `.docx`(Office Open XML)格式,**不支持旧版 `.doc` 格式

from docx import Document 是一个常见的导入语句,但该写法不正确,会导致 ModuleNotFoundError: No module named 'docx' 错误。

✅ 正确做法是使用 python-docx 库(注意:包名是 python-docx,而非 docx),其标准导入方式为:

from docx import Document

⚠️ 但前提是必须已安装该库:

pip install python-docx

📌 注意事项:

  • python-docx 仅支持 .docx(Office Open XML)格式,不支持旧版 .doc 格式
  • 它用于读写 Word 文档内容(文本、段落、表格、样式等),但不支持页眉/页脚/宏/图表渲染等高级功能;
  • Document 类用于创建新文档或打开现有 .docx 文件;
  • 示例:
    from docx import Document
    doc = Document()  # 新建空白文档
    doc.add_paragraph("Hello, World!")
    doc.save("example.docx")
    

❌ 常见错误混淆:

  • import docx → ❌ 不存在此顶层模块;
  • from docx import * → ❌ 同样无效;
  • import python_docximport python-docx → ❌ 包名含连字符,不能直接 import。

如需处理 .doc 文件或更复杂需求(如 PDF 转换、OCR、模板填充等),需结合其他工具(如 pywin32(Windows)、antiwordlibreoffice CLI 或 docxtpl 等)。
使用 python-docx 读取 Word 文档(.docx)中的所有段落所有表格,核心是遍历 Document 对象的 paragraphs 属性和 tables 属性。注意:表格本身可能嵌套在段落中(如表格前后有文字),但 doc.tables 已按文档顺序返回全部顶层表格(含嵌套在文本框或标题后的表格,不包括表格内嵌套的子表格——python-docx 不支持直接访问嵌套表格,需手动递归解析单元格内容,但当前版本暂无原生 API 支持深层嵌套表遍历)。

✅ 正确示例代码如下:

from docx import Document

def read_docx_content(file_path):
    doc = Document(file_path)
    
    # ✅ 读取所有段落(含空段落、标题、列表项等)
    print("=== 段落内容 ===")
    for i, para in enumerate(doc.paragraphs):
        text = para.text.strip()
        print(f"[P{i+1}] {repr(text)}")  # repr 显示空白符,便于调试
    
    # ✅ 读取所有顶层表格
    print("\n=== 表格内容 ===")
    for t_idx, table in enumerate(doc.tables):
        print(f"\n--- 表格 {t_idx + 1}{len(table.rows)} 行 × {len(table.columns)} 列)---")
        for r_idx, row in enumerate(table.rows):
            row_cells = [cell.text.strip() for cell in row.cells]
            print(f"  R{r_idx+1}: {row_cells}")

# 使用示例
# read_docx_content("sample.docx")

📌 补充说明:

  • para.text 返回段落纯文本(不含格式),自动合并同一段内多个 run 的内容;
  • 表格中每个 cell.text 同样是该单元格内所有段落的 .text 拼接(用 \n 分隔),若需精细控制(如保留换行、获取加粗文本),需遍历 cell.paragraphs
  • 若文档含节(Section)或页眉/页脚,需通过 doc.sectionssection.header / section.footer 访问,它们也包含 paragraphstables
  • python-docx 无法读取文本框(Text Box)、艺术字、OLE 对象或受保护/加密文档

⚠️ 注意:doc.tables 仅返回文档主体(main document part)中的表格,不包含页眉页脚内的表格(需单独访问 section.header.tables 等)。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bol5261

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值