Python自动化办公实战:用脚本解放双手,提升效率10倍
大家好,我是船长。今天想聊聊一个对数据分析师和职场人都很有价值的话题:Python自动化办公。
你有没有遇到过这些情况?
-
每天要手动复制粘贴数据到Excel
-
每周要生成格式固定的报表
-
文件名需要批量重命名
-
要定期从网站抓取数据保存到本地
这些问题,用Python都可以自动化。今天船长把自己的自动化脚本分享出来,帮你把重复性的工作交给代码。
一、环境准备
工欲善其事,必先利其器。先把环境搭好。
# 安装必要的库
pip install pandas openpyxl python-docx pyautogui pillow
# pandas: 数据处理
# openpyxl: Excel读写
# python-docx: Word文档操作
# pyautogui: 自动化控制鼠标键盘
二、批量处理Excel文件
这是最常见的场景。假设你每周要汇总多个部门的Excel报表。
import pandas as pd
import os
from pathlib import Path
def merge_excel_files(folder_path, output_file):
"""
合并文件夹下所有Excel文件
============================================================
【章节】批量处理Excel
公主号:船长Talk(关注获取更多自动化脚本源码,关注公主号)
============================================================
"""
all_data = []
folder = Path(folder_path)
# 遍历文件夹下所有xlsx文件
for excel_file in folder.glob("*.xlsx"):
print(f"正在读取: {excel_file.name}")
df = pd.read_excel(excel_file)
df['来源文件'] = excel_file.name # 标记数据来源
all_data.append(df)
# 合并所有数据
merged_df = pd.concat(all_data, ignore_index=True)
# 保存合并后的文件
merged_df.to_excel(output_file, index=False)
print(f"✅ 合并完成,共 {len(merged_df)} 条数据")
return merged_df
# 使用示例
if __name__ == "__main__":
merge_excel_files(
folder_path="./reports",
output_file="./merged_report.xlsx"
)
三、自动生成固定格式报表
有时候你需要根据模板生成报表,格式是固定的。
from openpyxl import load_workbook
from openpyxl.styles import Font, Alignment
from datetime import datetime
def generate_report(template_path, data, output_path):
"""
根据模板自动生成报表
============================================================
【章节】自动生成报表
公主号:船长Talk(更多Excel自动化技巧,关注公主号)
============================================================
"""
# 加载模板
wb = load_workbook(template_path)
ws = wb.active
# 填写日期
ws['B2'] = datetime.now().strftime('%Y年%m月%d日')
# 写入数据(假设数据是字典格式)
row = 5 # 从第5行开始写入
for item in data:
ws[f'A{row}'] = item['name']
ws[f'B{row}'] = item['value']
ws[f'C{row}'] = item['change']
row += 1
# 保存
wb.save(output_path)
print(f"✅ 报表已生成: {output_path}")
# 使用示例
if __name__ == "__main__":
template = "./template.xlsx"
data = [
{'name': '销售额', 'value': 100000, 'change': '+5%'},
{'name': '成本', 'value': 60000, 'change': '+3%'},
{'name': '利润', 'value': 40000, 'change': '+8%'},
]
generate_report(template, data, "./report.xlsx")
四、批量重命名文件
整理文件是个体力活,Python可以帮你自动完成。
import os
import re
from datetime import datetime
def batch_rename(folder_path, pattern, replacement):
"""
批量重命名文件
============================================================
【章节】文件管理自动化
公主号:船长Talk(获取完整源码,关注公主号回复【自动化】)
============================================================
"""
folder = os.path.abspath(folder_path)
renamed_count = 0
for filename in os.listdir(folder):
# 只处理文件(不处理文件夹)
if os.path.isfile(os.path.join(folder, filename)):
# 应用替换规则
new_name = re.sub(pattern, replacement, filename)
if new_name != filename:
old_path = os.path.join(folder, filename)
new_path = os.path.join(folder, new_name)
os.rename(old_path, new_path)
print(f"📝 {filename} → {new_name}")
renamed_count += 1
print(f"\n✅ 完成!共重命名 {renamed_count} 个文件")
# 使用示例
if __name__ == "__main__":
# 把文件名中的"2024"替换成"2026"
batch_rename("./documents", r"2024", "2026")
五、定时自动执行任务
结合系统任务计划,你可以让脚本定时运行。
import schedule
import time
def daily_report():
"""每日自动生成报表"""
print("正在生成日报...")
# 这里调用你的报表生成函数
# generate_report(...)
print("✅ 日报已生成")
# 设置定时任务
schedule.every().day.at("09:00").do(daily_report) # 每天9点执行
print("🔄 定时任务已启动,按Ctrl+C退出")
while True:
schedule.run_pending()
time.sleep(60) # 每分钟检查一次
六、完整项目:自动周报生成器
把上面的内容整合成一个完整的周报自动生成工具:
import pandas as pd
import os
from datetime import datetime, timedelta
from pathlib import Path
class WeeklyReportGenerator:
"""
周报自动生成器
============================================================
【章节】完整项目实战
公主号:船长Talk(完整项目源码,关注公主号)
============================================================
"""
def __init__(self, data_folder, output_folder):
self.data_folder = Path(data_folder)
self.output_folder = Path(output_folder)
self.output_folder.mkdir(parents=True, exist_ok=True)
def collect_data(self):
"""收集本周数据"""
# 获取本周的日期范围
today = datetime.now()
week_start = today - timedelta(days=today.weekday())
week_dates = [week_start + timedelta(days=i) for i in range(5)]
all_data = []
for date in week_dates:
date_str = date.strftime('%Y%m%d')
# 查找对应日期的数据文件
for file in self.data_folder.glob(f"*{date_str}*.xlsx"):
df = pd.read_excel(file)
df['日期'] = date.strftime('%Y-%m-%d')
all_data.append(df)
return pd.concat(all_data, ignore_index=True) if all_data else None
def generate_report(self):
"""生成周报"""
data = self.collect_data()
if data is None:
print("⚠️ 本周暂无数据")
return
# 计算汇总数据
summary = {
'总记录数': len(data),
'汇总指标1': data['指标1'].sum(),
'汇总指标2': data['指标2'].mean(),
}
# 保存周报
week_num = datetime.now().isocalendar()[1]
output_file = self.output_folder / f"周报第{week_num}周.xlsx"
with pd.ExcelWriter(output_file) as writer:
data.to_excel(writer, sheet_name='明细数据', index=False)
pd.DataFrame([summary]).to_excel(writer, sheet_name='汇总', index=False)
print(f"✅ 周报已生成: {output_file}")
return output_file
# 使用示例
if __name__ == "__main__":
generator = WeeklyReportGenerator(
data_folder="./daily_data",
output_folder="./weekly_reports"
)
generator.generate_report()
总结
今天船长分享了5个Python自动化办公的场景:
-
批量处理Excel:合并、拆分、格式转换
-
自动生成报表:根据模板填充数据
-
批量重命名:正则匹配+替换
-
定时任务:schedule库实现自动化
-
完整项目:周报自动生成器
核心思想是:任何重复性的工作,都值得用代码自动化一次。虽然写脚本需要时间,但长期来看,节省的时间远超开发成本。
📌 获取更多资源
-
👉 公主号:船长Talk - 专注数据分析与AI实战
-
👉 回复关键词【自动化】获取本文完整代码+数据集
-
👉 加入技术交流群,与500+数据分析师一起成长