本文目录导读:
- 目录导读
- 为什么选择Python操作Word?
- 环境搭建与核心库选择
- 基础案例:读取Word文本内容
- 进阶案例:提取表格与图片
- 实战案例:批量处理Word文档
- 常见问题与调试技巧
- 问答环节:高频问题解答
- 结语与扩展资源
Python读取Word案例实操:从入门到自动化处理(附完整代码)
目录导读
- 为什么选择Python操作Word?
- 环境搭建与核心库选择
- 基础案例:读取Word文本内容
- 进阶案例:提取表格与图片
- 实战案例:批量处理Word文档
- 常见问题与调试技巧
- 问答环节:高频问题解答
- 结语与扩展资源
为什么选择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-docx的iter_inner_content()方法。
问答环节:高频问题解答
Q1:python-docx能读取.rtf文件吗?
A:不能。python-docx专用于.docx格式,若要读取RTF,需使用python-docx2txt或pypandoc。
Q2:如何读取Word中的页眉页脚?
A:
doc = Document("file.docx")
for section in doc.sections:
header = section.header
print(header.paragraphs[0].text)
# 页脚同理:`section.footer`
Q3:提取表格时,合并单元格如何处理?
A:python-docx会将合并的单元格视为独立单元格,但文本内容需通过cell.text获取,注意索引可能重复。
Q4:批量转换doc到docx?
A:使用win32com或libreoffice命令行,推荐:
# 安装 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