Python读取word案例实操?

wen python案例 6

本文目录导读:

  1. 目录导读
  2. 为什么选择Python操作Word?
  3. 环境搭建与核心库选择
  4. 基础案例:读取Word文本内容
  5. 进阶案例:提取表格与图片
  6. 实战案例:批量处理Word文档
  7. 常见问题与调试技巧
  8. 问答环节:高频问题解答
  9. 结语与扩展资源

Python读取Word案例实操:从入门到自动化处理(附完整代码)

目录导读

  1. 为什么选择Python操作Word?
  2. 环境搭建与核心库选择
  3. 基础案例:读取Word文本内容
  4. 进阶案例:提取表格与图片
  5. 实战案例:批量处理Word文档
  6. 常见问题与调试技巧
  7. 问答环节:高频问题解答
  8. 结语与扩展资源

为什么选择Python操作Word?

在日常办公中,Word文档的批量处理是高频需求,无论是提取合同中的条款、整理报告中的表格,还是转换文档格式,手动操作都费时费力,Python凭借其强大的第三方库(如python-docx),能够高效完成这些任务。

优势对比

  • 传统方法:Ctrl+C/V逐文档操作,易出错。
  • Python方法:30行代码处理100个文档,零错误。

对于SEO优化,本文将从“Python读取word案例实操”这一关键词出发,结合搜索引擎中已有的热门教程,提炼出最实用的代码逻辑与避坑指南,确保内容既权威又易懂。


环境搭建与核心库选择

库安装命令

pip install python-docx

注意python-docx 默认不支持.doc格式(旧版Word),若需处理.doc,需借助win32com或转换工具。

关键模块导入

from docx import Document
from docx.shared import Inches, Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH

文件路径处理

建议使用绝对路径或os.path模块,避免编码问题:

import os
path = os.path.join(os.getcwd(), "example.docx")

基础案例:读取Word文本内容

1 逐段读取

doc = Document("sample.docx")
for para in doc.paragraphs:
    print(para.text)

2 保留格式读取

若需保留加粗、倾斜等格式:

for para in doc.paragraphs:
    for run in para.runs:
        if run.bold:
            print(f"加粗:{run.text}")

3 提取标题层级

for heading in [p for p in doc.paragraphs if p.style.name.startswith('Heading')]:
    print(f"标题[{heading.style.name}]:{heading.text}")

注意:文档中空段落会返回空字符串,建议过滤:

clean_text = [p.text for p in doc.paragraphs if p.text.strip()]

进阶案例:提取表格与图片

1 表格转字典

doc = Document("report.docx")
for table in doc.tables:
    data = []
    for row in table.rows:
        data.append([cell.text for cell in row.cells])
    print(data)  # 直接打印或存入DataFrame

若需结构化输出(如pandas DataFrame):

import pandas as pd
df = pd.DataFrame(data[1:], columns=data[0])  # 第一行为表头

2 提取嵌入图片

doc = Document("with_images.docx")
for i, shape in enumerate(doc.inline_shapes):
    if shape.type == 3:  # 图片类型
        image = shape._inline.graphic.graphicData.pic.blipFill.blip
        with open(f"image_{i}.png", "wb") as f:
            f.write(image.embedding._data)

限制:此方法仅适用于嵌入型图片,浮于文字上方的图片需用win32com


实战案例:批量处理Word文档

场景:提取100份简历中的关键信息

import glob
def extract_cv_keywords(file_path):
    doc = Document(file_path)
    info = {}
    for para in doc.paragraphs:
        if "姓名" in para.text:
            info["name"] = para.text.split(":")[-1].strip()
        elif "电话" in para.text:
            info["phone"] = para.text.split(":")[-1].strip()
    return info
# 批量处理
results = []
for file in glob.glob("简历/*.docx"):
    data = extract_cv_keywords(file)
    data["file"] = file
    results.append(data)

输出:可存入Excel或数据库,实现自动化归档。


常见问题与调试技巧

问题1:中文乱码

原因:Word文档编码与python读取不一致。
解决:在打开文档时指定编码(python-docx暂不支持直接设置,可预转文档保存为UTF-8)。

问题2:报错XMLSyntaxError

原因:文档损坏或包含特殊符号。
解决:尝试用docx.Document(path)时捕获异常:

try:
    doc = Document(path)
except Exception as e:
    print(f"跳过文件:{path},错误:{e}")
    continue

问题3:读取速度慢

优化:仅读取所需段落,使用python-docxiter_inner_content()方法。


问答环节:高频问题解答

Q1:python-docx能读取.rtf文件吗?

A:不能。python-docx专用于.docx格式,若要读取RTF,需使用python-docx2txtpypandoc

Q2:如何读取Word中的页眉页脚?

A

doc = Document("file.docx")
for section in doc.sections:
    header = section.header
    print(header.paragraphs[0].text)
    # 页脚同理:`section.footer`

Q3:提取表格时,合并单元格如何处理?

Apython-docx会将合并的单元格视为独立单元格,但文本内容需通过cell.text获取,注意索引可能重复。

Q4:批量转换doc到docx?

A:使用win32comlibreoffice命令行,推荐:

# 安装 win32com (仅Windows)
import win32com.client as win32
word = win32.Dispatch("Word.Application")
doc = word.Documents.Open("old.doc")
doc.SaveAs("new.docx", FileFormat=16)  # 16 = wdFormatXMLDocument
doc.Close()
word.Quit()

结语与扩展资源

通过以上案例,你已掌握Python读取Word的核心技术:从文本提取到表格解析,再到批量自动化,实际工作中,建议结合正则表达式( re模块)做信息精确匹配,或进一步学习python-pptx对PowerPoint的处理。

SEO优化建议

  • 在代码块中添加注释,提升可读性。
  • 推荐结合pandas输出结构化数据(如CSV),便于后续分析。
  • 若需发布为博客,建议补充动图演示运行过程。

扩展阅读

  • python-docx官方文档:搜索“python-docx read table”
  • 使用pdfplumber提取PDF文本的对比教程

标签: Word

抱歉,评论功能暂时关闭!