本文目录导读:
Python 在文档处理方面功能非常强大,生态也十分丰富,下面我按文档类型分类,列举一些常见且实用的处理案例,每个案例都会说明核心库和典型应用场景。
PDF 文档处理
提取文本内容
- 场景:从合同、报告中抓取关键信息。
- 库:
PyMuPDF(fitz) 或pdfplumber。 - 案例:读取 PDF 中所有文本,并按页保存。
import pdfplumber
with pdfplumber.open("合同.pdf") as pdf:
for page in pdf.pages:
text = page.extract_text()
print(text)
提取表格数据
- 场景:财务报表、科研数据表中的结构化数据。
- 库:
camelot-py或tabula-py。 - 案例:将 PDF 表格转为 Excel。
import camelot
tables = camelot.read_pdf("报表.pdf", pages="1-3", flavor="lattice")
tables[0].to_excel("输出.xlsx")
合并/拆分 PDF
- 场景:将多个发票合并为一个文件,或从大文件中取出特定页码。
- 库:
PyPDF2或pypdf。 - 案例:合并多个 PDF。
from pypdf import PdfWriter
writer = PdfWriter()
for file in ["a.pdf", "b.pdf"]:
writer.append(file)
writer.write("合并.pdf")
PDF 转 Word 或图片
- 场景:方便编辑或演示。
- 库:
pdf2docx或pdf2image。 - 案例:PDF 转 Word。
from pdf2docx import Converter
cv = Converter("输入.pdf")
cv.convert("输出.docx", start=0, end=None)
cv.close()
Word 文档处理(.docx)
批量生成 Word 合同/报告
- 场景:模板替换(邮件合并)。
- 库:
python-docx+Jinja2或docxtpl。 - 案例:用模板生成 100 份个性化合同。
from docxtpl import DocxTemplate
doc = DocxTemplate("合同模板.docx")
context = {"甲方": "张三", "金额": "5000"}
doc.render(context)
doc.save("输出合同.docx")
提取 Word 中的图片
- 场景:从简历或报告中提取头像、图表。
- 库:
python-docx。 - 案例:遍历文档中的图片并保存。
from docx import Document
import os
doc = Document("报告.docx")
for i, rel in enumerate(doc.part.rels.values()):
if "image" in rel.reltype:
image = rel.target_part
with open(f"图片_{i}.png", "wb") as f:
f.write(image.blob)
批量转换 Word 为 PDF
- 场景:系统自动化归档。
- 库:
comtypes(Windows)、docx2pdf(跨平台)、libreoffice(命令行)。 - 案例:使用 docx2pdf 批量转换。
from docx2pdf import convert
convert("输入.docx", "输出.pdf") # 单个文件
# 批量:convert("文件夹路径/") 自动转换文件夹下所有 .docx
Excel 电子表格处理
多文件合并为一个 Sheet
- 场景:月底汇总各门店销售数据。
- 库:
pandas+openpyxl。 - 案例:合并文件夹下所有 Excel 文件。
import pandas as pd
import glob
all_data = pd.DataFrame()
for f in glob.glob("销售数据/*.xlsx"):
df = pd.read_excel(f)
all_data = pd.concat([all_data, df], ignore_index=True)
all_data.to_excel("汇总.xlsx", index=False)
拆分一个大 Excel 为多个小文件
- 场景:按部门/地区分发数据。
- 库:
pandas。 - 案例:按“部门”列拆分为独立文件。
df = pd.read_excel("员工工资.xlsx")
for department, group in df.groupby("部门"):
group.to_excel(f"{department}.xlsx", index=False)
自动化格式化报表(加颜色、合并单元格)
- 场景:生成美观的月度报表。
- 库:
openpyxl。 - 案例:对低于 60 分的单元格标红。
from openpyxl import load_workbook
from openpyxl.styles import Font, PatternFill
wb = load_workbook("成绩单.xlsx")
ws = wb.active
red_fill = PatternFill(start_color="FF0000", end_color="FF0000", fill_type="solid")
for row in ws.iter_rows(min_row=2, max_col=3, max_row=10):
for cell in row:
if isinstance(cell.value, (int, float)) and cell.value < 60:
cell.fill = red_fill
wb.save("成绩单_美化.xlsx")
纯文本与 Markdown 处理
批量替换文本
- 场景:批量修改发票抬头、合同日期。
- 库:
re(正则表达式) + 文件读写。 - 案例:将文件夹中所有 .txt 文件的“2024”替换为“2025”。
import os, glob, re
for filepath in glob.glob("文档/*.txt"):
with open(filepath, "r", encoding="utf-8") as f:
content = f.read()
content = re.sub(r"2024", "2025", content)
with open(filepath, "w", encoding="utf-8") as f:
f.write(content)
Markdown 转 PDF/Word
- 场景:技术文档导出。
- 库:
pandoc(命令行) +subprocess或mdpdf。 - 案例:Markdown 转 PDF(需安装 pandoc)。
import subprocess subprocess.run(["pandoc", "文档.md", "-o", "文档.pdf", "--pdf-engine=xelatex"])
图像文档处理(OCR 与扫描件)
识别扫描 PDF 中的文字
- 场景:名片、纸质合同数字化。
- 库:
pytesseract+pdf2image。 - 案例:将扫描版 PDF 转为可编辑文本。
from pdf2image import convert_from_path
import pytesseract
images = convert_from_path("扫描件.pdf", dpi=300)
text = ""
for img in images:
text += pytesseract.image_to_string(img, lang="chi_sim+eng")
with open("结果.txt", "w", encoding="utf-8") as f:
f.write(text)
发票关键信息提取(结构化 OCR)
- 场景:财务报销自动化。
- 库:
paddleocr或百度/阿里云 AI API。 - 案例:使用 PaddleOCR 提取发票号码、金额。
from paddleocr import PaddleOCR
ocr = PaddleOCR(use_angle_cls=True, lang="ch")
result = ocr.ocr("发票.jpg", cls=True)
for line in result[0]:
print(line[1][0]) # 文本内容
复杂格式转换与批量处理工具
| 场景 | 库/工具 | 案例说明 |
|---|---|---|
| 任意文档格式互转 | pandoc |
Markdown ↔ Word ↔ HTML ↔ LaTeX |
| 批量重命名文件 | os + pathlib |
将文件名中的日期统一格式 |
| 提取公文中的章/节标题 | python-docx 遍历段落样式 |
生成自动目录 |
实际项目案例示例
案例项目:合同关键信息提取系统
- 输入:批量 PDF 合同扫描件(含盖章)。
- 处理流程:
pdf2image转图片 →PaddleOCR识别文字。python-docx解析规则(如“甲方:”后面的内容)。openpyxl输出到 Excel,包含:合同编号、甲方、金额、签署日期。
- 输出:汇总 Excel 报表,效率提升 10 倍。
总结建议
- 如果只是想简单操作:优先使用
pandas(Excel)、pypdf(PDF)、python-docx(Word)。 - 如果需要识别图片中的文字:
paddleocr或tesseract。 - 如果只是格式转换:
pandoc是最通用的单一工具。 - 如果追求高性能/大文件:
PyMuPDF比pypdf快很多,camelot比tabula表格提取更准。
你可以根据自己手头的任务类型,直接参考上述案例中的代码片段进行改造,如果需要针对某个特定场景(如金融财报分析、简历筛选、合同审核)做更深入的方案,欢迎补充描述,我可以给出更具体的架构和代码示例。