你还在做"表格民工"吗?
每天早上9点打开电脑,迎接你的是:
到了晚上9点,你还在复制粘贴、调整格式、核对数据...这样的工作状态,真的是你想要的吗?
其实,这些让你加班到深夜的重复劳动,Python只需要5分钟就能全部搞定!
今天我将分享5个实战脚本,每个都是我在工作中反复打磨的"效率神器"。学会这些,你每天至少能省出2小时,准点下班不再是梦!
场景1:批量合并Excel文件——告别复制粘贴的噩梦
痛点场景
每个月月初,各部门会发来几十个Excel销售报表,你需要把它们合并成一个文件。传统做法是一个个打开,复制粘贴,光这项工作就要耗费半天时间!
Python解决方案(10行代码搞定)
import pandas as pdimport osfrom pathlib import Pathdefmerge_excel_files(folder_path, output_file):"""批量合并Excel文件"""# 获取文件夹下所有Excel文件 excel_files = Path(folder_path).glob('*.xlsx')# 读取并合并所有文件 df_list = [pd.read_excel(file) for file in excel_files] merged_df = pd.concat(df_list, ignore_index=True)# 保存合并结果 merged_df.to_excel(output_file, index=False) print(f"成功合并 {len(df_list)} 个文件!")# 使用示例merge_excel_files('销售数据/', '合并结果.xlsx')
使用效果
进阶技巧
如果你的Excel文件结构不完全一致,可以添加列名对齐功能:
defsmart_merge_excel(folder_path, output_file):"""智能合并,自动处理列名差异""" excel_files = Path(folder_path).glob('*.xlsx') df_list = []for file in excel_files: df = pd.read_excel(file)# 添加来源文件列 df['数据来源'] = file.name df_list.append(df)# 合并时自动对齐列名 merged_df = pd.concat(df_list, ignore_index=True, sort=False) merged_df.to_excel(output_file, index=False)returnf"合并完成!共 {len(merged_df)} 行数据"print(smart_merge_excel('月度报表/', '2025年1月汇总.xlsx'))
场景2:自动生成周报——从此告别手动排版
痛点场景
每周五下午,HR催着交周报。你需要从数据库导出数据,手动计算各种指标,调整格式,插入图表...一套流程下来至少1小时。
Python解决方案(自动生成带图表的周报)
import pandas as pdimport matplotlib.pyplot as pltfrom openpyxl import load_workbookfrom openpyxl.drawing.image import Imagefrom datetime import datetimedefgenerate_weekly_report(data_file):"""自动生成周报Excel"""# 读取数据 df = pd.read_excel(data_file)# 数据分析 summary = {'总销售额': df['销售额'].sum(),'平均客单价': df['销售额'].mean(),'订单数量': len(df),'最高销售额': df['销售额'].max() }# 生成图表 plt.figure(figsize=(10, 6)) df.groupby('日期')['销售额'].sum().plot(kind='line', marker='o') plt.title('本周销售趋势', fontsize=16) plt.xlabel('日期') plt.ylabel('销售额(元)') plt.grid(True, alpha=0.3) plt.tight_layout() plt.savefig('sales_chart.png', dpi=300) plt.close()# 创建周报Excel report_df = pd.DataFrame([summary]).T report_df.columns = ['数值'] output_file = f'周报_{datetime.now().strftime("%Y%m%d")}.xlsx' report_df.to_excel(output_file)# 插入图表到Excel wb = load_workbook(output_file) ws = wb.active img = Image('sales_chart.png') ws.add_image(img, 'D2') wb.save(output_file) print(f"周报已生成: {output_file}")return output_file# 使用示例generate_weekly_report('本周数据.xlsx')
使用效果
场景3:数据清洗一键完成——脏数据秒变干净数据
痛点场景
从业务系统导出的数据总是乱七八糟:
手动清洗这些数据?想想就头疼!
Python解决方案(全自动清洗流程)
import pandas as pdimport numpy as npdefauto_clean_data(input_file, output_file):"""自动清洗数据"""# 读取数据 df = pd.read_excel(input_file) print(f"原始数据: {len(df)} 行")# 1. 删除完全重复的行 df = df.drop_duplicates() print(f"去重后: {len(df)} 行")# 2. 处理缺失值# 数值列:用中位数填充 numeric_cols = df.select_dtypes(include=[np.number]).columns df[numeric_cols] = df[numeric_cols].fillna(df[numeric_cols].median())# 文本列:用"未知"填充 text_cols = df.select_dtypes(include=['object']).columns df[text_cols] = df[text_cols].fillna('未知')# 3. 统一日期格式 date_cols = [col for col in df.columns if'日期'in col or'date'in col.lower()]for col in date_cols: df[col] = pd.to_datetime(df[col], errors='coerce')# 4. 清理数字列中的非数字字符for col in numeric_cols: df[col] = pd.to_numeric(df[col], errors='coerce')# 5. 去除首尾空格for col in text_cols: df[col] = df[col].str.strip()# 6. 标准化列名(去除空格和特殊字符) df.columns = df.columns.str.strip().str.replace(' ', '_')# 保存清洗后的数据 df.to_excel(output_file, index=False) print(f"\n清洗完成!") print(f"最终数据: {len(df)} 行 × {len(df.columns)} 列") print(f"已保存至: {output_file}")return df# 使用示例clean_df = auto_clean_data('脏数据.xlsx', '干净数据.xlsx')
升级版:生成数据质量报告
defdata_quality_report(df):"""生成数据质量报告""" report = {'总行数': len(df),'总列数': len(df.columns),'重复行数': df.duplicated().sum(),'缺失值情况': df.isnull().sum().to_dict(),'数据类型': df.dtypes.to_dict() }# 保存报告with open('数据质量报告.txt', 'w', encoding='utf-8') as f: f.write("=" * 50 + "\n") f.write("数据质量报告\n") f.write("=" * 50 + "\n\n")for key, value in report.items(): f.write(f"{key}:\n{value}\n\n") print("数据质量报告已生成!")
场景4:自动发送邮件报告——解放你的双手
痛点场景
每天下班前,需要把数据分析结果通过邮件发给领导和同事。手动发邮件、附加文件、写邮件正文...又是10分钟过去了。
Python解决方案(自动发送带附件的邮件)
import smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.mime.application import MIMEApplicationfrom datetime import datetimedefsend_report_email(to_emails, subject, body, attachments):"""自动发送报告邮件"""# 邮箱配置(以QQ邮箱为例) sender = 'your_email@qq.com' password = 'your_password'# QQ邮箱需要使用授权码# 创建邮件 msg = MIMEMultipart() msg['From'] = sender msg['To'] = ', '.join(to_emails) msg['Subject'] = subject# 邮件正文 msg.attach(MIMEText(body, 'html', 'utf-8'))# 添加附件for file_path in attachments:with open(file_path, 'rb') as f: attachment = MIMEApplication(f.read()) attachment.add_header('Content-Disposition', 'attachment', filename=file_path.split('/')[-1]) msg.attach(attachment)# 发送邮件try: server = smtplib.SMTP_SSL('smtp.qq.com', 465) server.login(sender, password) server.sendmail(sender, to_emails, msg.as_string()) server.quit() print(f"邮件发送成功! 收件人: {', '.join(to_emails)}")except Exception as e: print(f"邮件发送失败: {str(e)}")# 使用示例email_body = f"""<html><body><h2>每日数据报告 - {datetime.now().strftime('%Y年%m月%d日')}</h2><p>各位领导,同事:</p><p>今日数据报告已生成,请查收附件。</p><p><b>主要指标:</b></p><ul> <li>总销售额: ¥123,456</li> <li>订单量: 1,234</li> <li>转化率: 3.45%</li></ul><p>详细数据请见附件Excel文件。</p></body></html>"""send_report_email( to_emails=['boss@company.com', 'colleague@company.com'], subject='每日销售数据报告', body=email_body, attachments=['周报_20250121.xlsx', 'sales_chart.png'])
使用效果
场景5:定时任务——让电脑替你加班
痛点场景
有些数据处理工作需要每天固定时间执行,比如每天早上8点生成昨日报表。难道要每天早起打开电脑手动运行?
Python解决方案(Windows定时任务)
方法1: 使用schedule库(简单易用)
import scheduleimport timedefdaily_task():"""每日自动执行的任务""" print(f"开始执行任务... {datetime.now()}")# 调用前面的函数 merge_excel_files('数据/', '每日汇总.xlsx') generate_weekly_report('每日汇总.xlsx') send_report_email( ['boss@company.com'],'每日自动报告','报告已自动生成', ['周报_20250121.xlsx'] ) print("任务执行完成!")# 设置定时任务schedule.every().day.at("08:00").do(daily_task) # 每天8点执行schedule.every().monday.at("09:00").do(daily_task) # 每周一9点执行schedule.every(30).minutes.do(daily_task) # 每30分钟执行# 持续运行print("定时任务已启动,等待执行...")whileTrue: schedule.run_pending() time.sleep(60)
方法2: 使用Windows任务计划程序(更稳定)
创建一个Python脚本 auto_report.py,然后:
- 参数填写:
C:\your_path\auto_report.py
这样即使你不在电脑前,脚本也会自动执行!
完整自动化工作流示例
把以上所有功能整合到一起,实现全自动化数据处理流程:
import pandas as pdfrom datetime import datetime, timedeltaimport osclassDataAutomation:"""数据自动化处理类"""def__init__(self, data_folder, output_folder): self.data_folder = data_folder self.output_folder = output_folder os.makedirs(output_folder, exist_ok=True)defrun_daily_pipeline(self):"""执行每日数据处理流程""" print("=" * 60) print(f"开始执行每日自动化流程 - {datetime.now()}") print("=" * 60)# 步骤1: 合并Excel文件 print("\n[1/5] 合并数据文件...") merged_file = f"{self.output_folder}/merged_data.xlsx" self.merge_files(merged_file)# 步骤2: 清洗数据 print("\n[2/5] 清洗数据...") clean_file = f"{self.output_folder}/clean_data.xlsx" self.clean_data(merged_file, clean_file)# 步骤3: 生成报告 print("\n[3/5] 生成分析报告...") report_file = f"{self.output_folder}/daily_report.xlsx" self.generate_report(clean_file, report_file)# 步骤4: 生成图表 print("\n[4/5] 生成数据图表...") self.create_charts(clean_file)# 步骤5: 发送邮件 print("\n[5/5] 发送邮件通知...") self.send_notification([report_file]) print("\n" + "=" * 60) print("✅ 所有任务执行完成!") print("=" * 60)defmerge_files(self, output_file):"""合并文件""" files = list(Path(self.data_folder).glob('*.xlsx')) df_list = [pd.read_excel(f) for f in files] merged = pd.concat(df_list, ignore_index=True) merged.to_excel(output_file, index=False) print(f" ✓ 已合并 {len(files)} 个文件")defclean_data(self, input_file, output_file):"""清洗数据""" df = pd.read_excel(input_file) df = df.drop_duplicates() df = df.fillna(method='ffill') df.to_excel(output_file, index=False) print(f" ✓ 数据清洗完成")defgenerate_report(self, input_file, output_file):"""生成报告""" df = pd.read_excel(input_file) summary = pd.DataFrame({'指标': ['总销售额', '平均值', '最大值', '最小值'],'数值': [df['金额'].sum(), df['金额'].mean(), df['金额'].max(), df['金额'].min()] }) summary.to_excel(output_file, index=False) print(f" ✓ 报告生成完成")defcreate_charts(self, input_file):"""生成图表"""# 图表生成代码... print(f" ✓ 图表生成完成")defsend_notification(self, attachments):"""发送通知"""# 邮件发送代码... print(f" ✓ 邮件发送成功")# 使用示例if __name__ == "__main__": automation = DataAutomation( data_folder='原始数据', output_folder='处理结果' ) automation.run_daily_pipeline()
实战建议:从0到1搭建自己的自动化系统
第一步:盘点你的重复工作
拿出纸笔,列出你每天/每周都要做的重复性工作:
第二步:从最简单的开始
不要一开始就想做很复杂的自动化,先从最简单、最高频的任务入手。比如:
第三步:逐步完善
先让脚本跑起来,再慢慢优化:
第四步:建立自己的代码库
把每个实用的脚本都保存好,建立自己的"武器库":
我的Python工具箱/├── Excel处理/│ ├── 合并文件.py│ ├── 拆分文件.py│ └── 格式转换.py├── 数据清洗/│ ├── 自动清洗.py│ └── 质量检查.py├── 报表生成/│ ├── 周报生成.py│ └── 月报生成.py└── 邮件发送/ └── 自动发送.py
记住:工作是为了更好地生活,而不是让生活被工作填满。
觉得有用的话,别忘了点赞、收藏、转发给需要的朋友!你的支持是我持续分享的动力! 💪
我们开通了 粉丝学习交流群,可以加群学习,共同进步!