Python读取Word文档全攻略:从入门到高效办公

一、为什么用Python读取Word文档?

在日常办公或数据处理中,Word文档是常见的信息载体。使用Python可以自动化提取内容,避免手动复制粘贴,尤其适合批量处理、数据挖掘或生成报告。本文将聚焦于 .docx 格式(Office 2007+),通过 python-docx 库实现高效读取。

二、环境准备

首先安装python-docx:

pip install python-docx

注意:该库不支持 .doc 格式,如需处理旧版文档,可先转换为docx或使用 win32com(Windows下)。

三、基础读取:文本与段落

导入库,打开文档:

from docx import Document
doc = Document('example.docx')

遍历段落:

for para in doc.paragraphs:
    print(para.text)

若需保留格式(如加粗、字号),可通过 para.runs 访问每个文本片段:

for run in para.runs:
    print(run.text, run.bold, run.font.size)

四、表格数据提取

Word表格很常见,python-docx对表格支持良好:

for table in doc.tables:
    for row in table.rows:
        for cell in row.cells:
            print(cell.text)

也可以按行获取:

for row in table.rows:
    row_data = [cell.text for cell in row.cells]
    print(row_data)

五、图片与嵌入式内容

文档中的图片可通过内联形状获取:

for shape in doc.inline_shapes:
    if shape.type == 3:  # 图片类型
        image = shape.image
        with open('image.png', 'wb') as f:
            f.write(image.blob)

注意:图片可能以不同格式存储,需根据实际情况选择扩展名。

六、样式与格式信息

除了文本,有时需要获取字体、颜色、对齐方式等:

for para in doc.paragraphs:
    print(para.style.name)  # 段落样式
    fmt = para.paragraph_format
    print(fmt.alignment, fmt.space_before, fmt.space_after)
    for run in para.runs:
        print(run.font.name, run.font.size, run.font.color.rgb)

七、高级技巧

  • 分节读取:doc.sections 可获取页眉页脚、页面设置等。
  • 提取所有文本:结合段落和表格,递归获取。
  • 处理超长文档:使用迭代器(如 doc.paragraphs)避免内存爆炸。
  • 保存修改:读取后修改再 doc.save('new.docx')。

八、实战案例:提取会议纪要

假设一个Word文档包含标题、日期、参会人员以及讨论内容表格,代码示例:

from docx import Document
doc = Document('会议纪要.docx')
# 提取标题
print('标题:', doc.paragraphs[0].text)
# 提取表格
table = doc.tables[0]
for row in table.rows:
    print(' | '.join(cell.text for cell in row.cells))

九、常见问题

  • 读取乱码:确保文档编码正确,通常UTF-8。若文档损坏,尝试用Word修复。
  • 性能慢:对于超大文档,可考虑 lxml 直接解析XML(docx本质是压缩包)。
  • 跨平台:python-docx纯Python实现,Windows/Linux/macOS均可。

十、总结

Python读取Word文档并不复杂,python-docx提供了完善的API,覆盖文本、表格、图片、样式等需求。掌握后,你可以轻松实现自动化办公,比如批量提取简历信息、生成报告、数据迁移等。希望本文能帮助你快速上手,提升工作效率!