6 个 Python 办公自动化技巧:PDF 解析、邮件发送与数据分析实战
前言
在现代办公场景中,重复性、机械化的工作占据了大量时间。利用 Python 脚本处理文档、数据通信和报表分析,可以显著提升工作效率。本文将介绍六个实用的 Python 办公自动化场景,涵盖 PDF 解析、邮件发送、Excel 数据处理、可视化绘图、Word 文档读取以及基础数学计算,并提供完整的代码示例。
本文介绍了六个实用的 Python 办公自动化场景,涵盖 PDF 简历解析、SMTP 邮件发送、Excel 数据处理(Vlookup、透视表、去重)、数据可视化绘图、Word 文档读取以及基础数学计算。通过具体的代码示例和库函数说明,帮助开发者利用 Python 脚本替代重复性手工操作,显著提升日常办公效率。

在现代办公场景中,重复性、机械化的工作占据了大量时间。利用 Python 脚本处理文档、数据通信和报表分析,可以显著提升工作效率。本文将介绍六个实用的 Python 办公自动化场景,涵盖 PDF 解析、邮件发送、Excel 数据处理、可视化绘图、Word 文档读取以及基础数学计算,并提供完整的代码示例。
应用场景: 批量解析简历或合同中的关键信息(姓名、邮箱、电话、学历等)。
环境准备: Python 3.6+,需安装 pdfminer.six。
pip install pdfminer.six
依赖包导入:
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.layout import LAParams, PDFPageAggregator
核心代码实现:
def pdf_reader(file_path):
try:
fp = open(file_path, "rb")
parser = PDFParser(fp)
doc = PDFDocument(parser)
parser.set_document(doc)
resource = PDFResourceManager()
laparams = LAParams()
device = PDFPageAggregator(resource, laparams=laparams)
interpreter = PDFPageInterpreter(resource, device)
res = ''
for page in PDFPage.create_pages(doc):
interpreter.process_page(page)
layout = device.get_result()
for out in layout:
if hasattr(out, "get_text"):
res += out.get_text() + '\n'
return res
except Exception as e:
print(f"解析失败:{e}")
return None
finally:
fp.close()
说明: 该函数遍历 PDF 的每一页,提取文本内容并拼接返回。适用于纯文本型 PDF,对于扫描版图片 PDF 需结合 OCR 技术。
应用场景: 自动发送日报、周报或批量通知邮件。
环境准备: Python 标准库 smtplib 和 email。
核心代码实现:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
def send_email(sender, receivers, subject, content):
try:
message = MIMEText(content, 'plain', 'utf-8')
message['From'] = Header("系统通知", 'utf-8')
message['To'] = Header("接收人", 'utf-8')
message['Subject'] = Header(subject, 'utf-8')
# 连接 SMTP 服务器 (以 localhost 为例,实际需替换为真实服务器地址)
smtpObj = smtplib.SMTP('smtp.example.com', 587)
smtpObj.starttls() # 开启 TLS 加密
smtpObj.login('[email protected]', 'your_password')
smtpObj.sendmail(sender, receivers, message.as_string())
print("邮件发送成功")
except smtplib.SMTPException as e:
print(f"Error: 无法发送邮件 - {e}")
finally:
smtpObj.quit()
# 调用示例
send_email(
sender='[email protected]',
receivers=['[email protected]', '[email protected]'],
subject='Python SMTP 邮件测试',
content='这是一封由 Python 自动发送的测试邮件。'
)
参数说明:
host: SMTP 服务器主机地址。port: 端口号,通常为 25 或 587。sender: 发件人地址。receivers: 收件人列表。应用场景: 替代 Vlookup、透视表等手动操作,进行大规模数据清洗与分析。
环境准备: 需安装 pandas 和 openpyxl。
pip install pandas openpyxl
使用 merge 方法合并两个 DataFrame。
import pandas as pd
# 模拟数据
df1 = pd.DataFrame({"订单明细号": [101, 102, 103], "金额": [100, 200, 300]})
df2 = pd.DataFrame({"订单明细号": [101, 102, 104], "状态": ["已发货", "待发货", "取消"]})
# 左连接
df_c = pd.merge(df1, df2, on="订单明细号", how="left")
print(df_c)
统计不同维度的汇总数据。
# 假设 sale 为包含地区、业务员、利润的 DataFrame
pivot = pd.pivot_table(sale, index="地区名称", columns="业务员名称", values="利润", aggfunc=[np.sum, np.mean])
筛选出两列不一致的数据行。
sale["订单明细号 2"] = sale["订单明细号"].copy()
sale.loc[sale.index[1:10], "订单明细号 2"] += 1
result = sale.loc[sale["订单明细号"] != sale["订单明细号 2"]]
删除指定列的重复记录。
sale.drop_duplicates(subset=["业务员编码"], inplace=True)
填充空值或删除含空值的行。
sale["客户名称"] = sale["客户名称"].fillna(0)
sale.dropna(subset=["客户编码"], inplace=True)
根据多个条件过滤数据。
# 筛选北京区域、张爱、订单金额大于 5000 的记录
result = sale.loc[(sale["地区名称"] == "北京") &
(sale["业务员名称"] == "张爱") &
(sale["订单金额"] > 5000)]
使用正则表达式匹配字符串。
# 筛选存货名称含有'三星'或'索尼'的信息
result = sale.loc[sale["存货名称"].str.contains("三星 | 索尼")]
按组聚合计算。
result = sale.groupby(["地区名称", "业务员名称"])["利润"].sum()
对满足条件的数据进行统计分析。
stats = sale.loc[
(sale["存货名称"].str.contains("三星")) &
(sale["税费"] >= 1000)
][["订单明细号", "利润"]].describe()
清洗字符串格式。
sale["存货名称"] = sale["存货名称"].map(lambda s: s.strip())
应用场景: 生成动态交互式图表,用于数据展示报告。
环境准备: 需安装 pyecharts。
pip install pyecharts
代码示例:
from pyecharts.charts import Radar
from pyecharts import options as opts
# 设置雷达图 schema
schema = [
opts.RadarIndicatorItem(name="物理", max_=100),
opts.RadarIndicatorItem(name="魔法", max_=100),
opts.RadarIndicatorItem(name="防御", max_=100),
opts.RadarIndicatorItem(name="难度", max_=100),
opts.RadarIndicatorItem(name="喜好", max_=100)
]
radar = Radar()
radar.add_schema(schema=schema)
# 添加数据系列
radar.add("满分", [[10, 10, 10, 10, 10]], color="#E37911")
radar.add("安妮", [[2, 10, 3, 6, 3]], color="#1C86EE")
radar.add("卡尔玛", [[1, 8, 7, 5, 8]], color="#00BFFF")
# 渲染输出
radar.render("radar_chart.html")
应用场景: 批量提取 Word 文档中的段落文本。
环境准备: 需安装 python-docx。
pip install python-docx
核心代码实现:
import os
from docx import Document
def word_reader(file_path):
if not file_path.endswith('.docx'):
# 注意:doc 转 docx 通常需要外部工具如 LibreOffice 或 textutil
# 此处仅演示 docx 读取逻辑
print("当前仅支持 .docx 格式直接读取")
return None
try:
f = Document(file_path)
res = ''
for para in f.paragraphs:
res += para.text + '\n'
return res
except Exception as e:
print(f"读取失败:{e}")
return None
说明: 对于 .doc 旧格式,建议先转换为 .docx 再处理,或使用 textract 等第三方库。
应用场景: 执行复杂的浮点运算、随机数生成及日期计算。
环境准备: Python 内置 math 模块。
代码示例:
import math
import random
import datetime
# 1. 三角函数运算
angle = math.pi / 4
cos_val = math.cos(angle)
print(f"cos(pi/4) = {cos_val}")
# 2. 随机数生成
random_num = random.randint(1, 100)
print(f"随机整数:{random_num}")
# 3. 日期计算
today = datetime.date.today()
next_week = today + datetime.timedelta(days=7)
print(f"下周日期:{next_week}")
通过上述六个案例,展示了 Python 在办公自动化领域的强大能力。从非结构化文档(PDF/Word)的解析,到结构化数据(Excel)的处理,再到通信(Email)与可视化(Plot),Python 能够串联起整个办公流程。建议在实际项目中根据具体需求灵活组合这些脚本,建立自己的自动化工作流,从而将精力集中在更具创造性的工作上。
注:以上代码基于 Python 3 环境编写,运行前请确保已安装相应依赖库。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online