一、为什么你需要学一点自动化?
不知道你有没有经历过这样的“黑色星期五”:
-
领导甩过来50个销售分表,让你在半小时内合并成总表;
-
你花了一上午把杂乱无章的200个PDF合同重命名;
-
每天早晨的例会前,你要花15分钟从邮箱下载附件并回复“收到”。
这些工作有一个共同点:极其简单,极其重复,极其消耗生命。
人类是情绪动物,做重复劳动会烦躁、会出错;而代码是冰冷的机器,做重复劳动毫秒级完成且零误差。这就是为什么要学自动化——不是为了当程序员,而是为了当指挥机器的人。
二、入门前你必须懂的三个“反直觉”真相
在动手写代码之前,先建立正确的认知,否则你很容易半途而废:
-
写代码的时间<手工操作的时间,才值得写:如果手动复制粘贴只要1分钟,但写脚本要10分钟,那别写。但现实是,你写一次脚本,后面能复用一万次。所以只要这个动作你这辈子会重复超过3次,就值得自动化。
-
不用背代码,会用搜索引擎就行:没有任何程序员能背下所有库的用法。写自动化脚本的本质就是:“我要实现A功能,请问Python里哪个库能做?搜一下,复制示例,改一改。”
-
别追求完美,跑通就是胜利:不需要写出优雅的面向对象代码,只要能把那个该死的Excel合并完,就算成功。
三、准备工作:3分钟搭好你的“自动化工位”
电脑不需要很高配置,但需要装好三样东西:
-
Python解释器(去官网下载,安装时务必勾选 “Add Python to PATH” ,否则后面会报错)。
-
代码编辑器(推荐 VS Code 或 PyCharm社区版,免费且强大)。
-
安装核心库:打开终端(CMD或PowerShell),依次输入以下命令安装我们的“四大金刚”:
bash
pip install pandas openpyxl # Excel神器 pip install pyautogui # 控制鼠标键盘(物理外挂) pip install send2trash # 安全删除文件(不进回收站的那种) pip install schedule # 定时任务
四、实战案例一:3秒合并100个Excel表格(行政/财务必看)
痛点场景:每个月各分店发来格式完全一致的Excel,你需要将它们垂直堆叠(纵向合并)成一个总表。
解决方案:只要你的表头一致,下面这几行代码就是救星。
python
import pandas as pd
import glob
import os
# 1. 定位文件夹:假设所有分表都在当前目录下的 "data" 文件夹里
path = "data/"
# 2. 找出所有以 .xlsx 或 .xls 结尾的文件
all_files = glob.glob(os.path.join(path, "*.xlsx"))
# 3. 创建一个空的列表,用来存放读取出来的数据
df_list = []
# 4. 循环读取每一个文件
for file in all_files:
# 读取Excel
df = pd.read_excel(file)
# 把数据装进列表(此处还可以增加一列记录文件名,方便追溯来源)
df['来源门店'] = os.path.basename(file).replace('.xlsx', '')
df_list.append(df)
# 5. 将列表中的所有数据合并成一个DataFrame
result_df = pd.concat(df_list, ignore_index=True)
# 6. 输出为新的Excel文件
result_df.to_excel("月度汇总_总表.xlsx", index=False)
print(f"合并完成!共处理了 {len(all_files)} 个文件。")
效果:手工做可能需要一整天,代码运行甚至看不到进度条就结束了。
五、实战案例二:让电脑自己“乱点”的物理外挂(GUI自动化)
痛点场景:有些老旧的内部管理系统没有API接口,必须手动点击“查询-导出-确认”。或者你需要批量录入大量数据到网页表单里。
解决方案:Python的 pyautogui 库可以直接控制你的鼠标和键盘,像真人一样操作屏幕。
python
import pyautogui
import time
# 安全设置:把鼠标甩到左上角可以紧急中止程序
pyautogui.FAILSAFE = True
# 给操作留出3秒准备时间(让你把鼠标放到要点击的按钮上)
time.sleep(3)
# 1. 获取当前屏幕分辨率,便于定位
screen_width, screen_height = pyautogui.size()
print(f"屏幕尺寸: {screen_width} x {screen_height}")
# 2. 移动鼠标到坐标 (x=500, y=300) 并点击左键
pyautogui.moveTo(500, 300, duration=0.5) # duration是移动动画时间
pyautogui.click()
# 3. 输入文字
pyautogui.write('2026-06-20', interval=0.1) # 像人一样一个字一个字打
# 4. 按下回车
pyautogui.press('enter')
# 5. 如果是截图识别点击(高级用法,适合按钮图片不变的情况)
# 先截取按钮的小图标保存为 button.png,然后:
# button_pos = pyautogui.locateOnScreen('button.png')
# pyautogui.click(button_pos)
注意:这种操作很“莽”,一旦开始执行就别乱动鼠标键盘,否则会干扰轨迹。强烈建议在虚拟机或测试环境中先用。
六、实战案例三:让电脑给你“打工”——定时发送工作邮件
痛点场景:每天固定时间要给客户或上级发送昨日数据报表,但总忘记发。
解决方案:结合 smtplib(发邮件)和 schedule(定时任务)。
python
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
import schedule
import time
def send_daily_report():
# 邮箱配置(建议用网易邮箱或QQ邮箱的授权码登录,不要用明文密码)
sender = 'your_email@163.com'
password = '你的授权码(不是登录密码)'
receiver = 'boss@company.com'
# 拼装邮件内容
msg = MIMEMultipart()
msg['Subject'] = '【自动发送】每日数据报表'
msg['From'] = sender
msg['To'] = receiver
# 邮件正文
body = "老板,这是今天的自动汇总数据,请查收附件。\n\n(本邮件由Python自动发送)"
msg.attach(MIMEText(body, 'plain', 'utf-8'))
# 添加附件(假设我们上一步合并好的Excel)
with open('月度汇总_总表.xlsx', 'rb') as f:
part = MIMEBase('application', 'octet-stream')
part.set_payload(f.read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="今日数据.xlsx"')
msg.attach(part)
# 发送
try:
with smtplib.SMTP_SSL('smtp.163.com', 465) as server:
server.login(sender, password)
server.sendmail(sender, receiver, msg.as_string())
print(f"邮件发送成功!时间:{time.ctime()}")
except Exception as e:
print(f"发送失败: {e}")
# 设置定时任务:每天早上 09:00 执行
schedule.every().day.at("09:00").do(send_daily_report)
print("定时任务已启动,等待执行...")
while True:
schedule.run_pending()
time.sleep(60) # 每分钟检查一次
效果:只要你开着电脑且连网,每天9点它自动把活干了,你只需要翘着脚看邮件“已发送”的提示。
七、七条血泪经验(写给新手的避坑指南)
作为过来人,给你几条掏心窝的建议,能让你少走一整个月的弯路:
-
路径里千万别带中文和空格:
C:\我的文件\测试这种路径十有八九会报编码错误。养成好习惯:全英文路径 + 下划线(如C:\work\scripts\)。 -
处理表格用
pandas,别用openpyxl硬怼:openpyxl是底层操作单元格的,很慢。pandas是一行代码加载整个表,处理完一行代码写回去。 -
操作文件前先备份:写删除或覆盖逻辑时,先用
print把要删除的文件名打印出来看看,确认无误再放开真的删除代码。 -
遇到报错别慌,看最后三行:报错信息(Traceback)最下面的红色字体才是真正的报错原因,上面全是调用过程,不用管。
-
Python版本别用最新的:有时最新版会有兼容问题,建议安装 Python 3.10 或 3.11 版本,稳如老狗。
-
Excel 里有合并单元格?放弃自动化:如果源数据有大量跨列合并居中,
pandas读出来会是NaN。要么手工先取消合并填充,要么用fillna(method='ffill')处理。 -
别用来做爬虫干坏事:自动发送请求频率别太快,尊重别人网站的
robots.txt,否则会被封IP。
八、写在最后
很多人觉得“自动化很难”,其实是被那黑乎乎的终端窗口吓到了。但你回过头看上面那三段代码,加起来不超过30行,却能替代好几个小时的体力活。
编程在这个时代,已经不是程序员的专利,而是职场人的“魔法技能”。
不要再问“现在学晚不晚”,种一棵树最好的时间是十年前,其次是现在。就从今天开始,把第一个合并Excel的代码跑通,你会体验到一种前所未有的快感——当别人还在手动复制粘贴时,你已经泡好咖啡看着屏幕发呆了。
祝你早日成为一名“偷懒”大师。☕️

1606

被折叠的 条评论
为什么被折叠?



