No More Manual Labor: What Is Python Automation and Why You Need It
你上周是不是为了找上周的数学作业PDF,在Downloads文件夹里翻了十分钟?鼠标滚轮滑到手指发麻,翻到的不是三周前的梗图,就是半年前下载的Minecraft模组安装包,最后还不得不对着满屏的文件挨个重命名?或者上周社团招新,你对着报名表单填了十分钟姓名、学号、邮箱,填到第三个人的时候突然浏览器崩了,所有内容全没了,当场想砸键盘?甚至上周你最好的朋友的生日你居然忘了,等你想起来的时候已经是第二天,朋友发朋友圈吐槽你“塑料友谊”,你只能尴尬地扣个“生日快乐”的表情包?
如果你中了以上任意一条,恭喜你,你已经体验过重复性手动劳动的毒打了。而本章要讲的Python自动化,就是专门用来治这些病的“数字良药”——不是什么高大上的程序员专属技能,也不是要你背几百页语法、做几十道数学题,就是让你花5分钟写个小脚本,把那些你每次都要做、步骤完全一样、纯属浪费时间的傻活,全交给电脑干,你只需要把时间花在背单词、刷题、打游戏、和朋友出去玩这些真正有意思的事情上。
什么是自动化?就是你雇了个不用睡觉不用工资的数字打工人
很多人一听到“自动化”就想到工厂里的机械臂、大厂里的服务器集群,觉得离自己十万八千里。其实自动化的本质超级简单:把你做一件事情的步骤拆成明确的规则,让电脑按照规则自动跑,不用你手动操作。
比如你整理下载文件夹的步骤,拆解出来就是: 1. 打开Downloads文件夹 2. 看每个文件的后缀名,是PDF就移到Documents/Homework文件夹 3. 是图片(png/jpg/gif)就移到Pictures/Memes文件夹 4. 是安装包(exe/dmg)就移到Downloads/Installers文件夹 5. 超过30天的旧文件移到Archive文件夹
这些步骤完全不用动脑子,纯属体力活,你每次整理都要花10分钟,一个月整理4次就是40分钟,一年下来浪费8个小时——相当于一整个周末的下午,够你看两场电影或者打一下午游戏了。而如果你把这些步骤写成Python脚本,只需要点一下运行,电脑1秒就能帮你整理完,比你手动快600倍,还不会漏文件。
再比如你每天要查Canvas上的作业截止日期,步骤是: 1. 打开浏览器 2. 登录学校Canvas账号 3. 点进课程页面 4. 挨个看每个作业的截止日期 5. 记到日历或者笔记本上
这些步骤你每天都要花15分钟,一个学期下来浪费40多个小时,相当于5天的上课时间。而如果你写个脚本自动爬Canvas页面、提取截止日期、同步到你的Google Calendar,你只需要花5分钟设置好,之后每天自动跑,你连打开Canvas的步骤都省了,再也不会因为忘了截止日期被老师扣分。
```mermaid graph LR A[发现重复性任务] --> B[拆解任务步骤] B --> C[用Python写脚本] C --> D[设置自动运行] D --> E[节省时间做更喜欢的事] ``` > 💡 电子版侧边栏:5分钟小挑战 现在打开你的Downloads文件夹,数一数里面有多少个文件,整理它们花了你多久时间?如果你用我们后面要教的脚本,只需要1秒,你觉得能省多少时间?欢迎在本书的读者社区分享你的答案!
自动化的核心是“重复”,不是“复杂”
很多人觉得“我每天要做的事都不一样,没法自动化”,其实90%的重复劳动都是“步骤一样,内容稍微变一点”,完全可以用自动化解决。比如你报不同的社团,表单的URL不一样,但是填的内容都是你的姓名、学号、班级,你只需要改个URL,脚本就能帮你填所有表单,不用每次手动输入。再比如你每个月要整理一次下载文件夹,每次的文件不一样,但是分类规则是一样的,脚本每次都能帮你按规则整理,不用你每次手动分类。
4个你每天都在遇到的自动化场景,Python5分钟就能搞定
我们不会给你讲什么“自动处理百万级财务报表”“自动训练AI模型”这种你根本用不上的例子,所有案例都是你每天在学校和生活中真的会遇到的,而且每个场景的脚本都不会超过20行,你跟着抄一遍就能跑通。
场景1:自动整理混乱的Downloads文件夹,再也不用翻10分钟找作业
根据Pew Research Center 2023年的青少年数字行为调查报告[^1],美国12-18岁的青少年平均每周下载37个文件,其中62%是临时下载的梗图、模组安装包、临时文档,平均每月花2.3小时整理文件,相当于一整天的课余时间。国内的情况更夸张,很多 teens 的Downloads文件夹里有上千个文件,找个作业比大海捞针还难。
Python帮你整理文件的逻辑超级简单,就是按“后缀名+文件名关键词”分类,比如文件名里有“homework”“assignment”“essay”的PDF自动移到作业文件夹,图片自动移到梗图文件夹,安装包自动移到安装包文件夹,超过30天的旧文件自动移到归档文件夹。你只需要写一次规则,之后每次整理点一下运行,或者设成每天自动运行,回家的时候Downloads文件夹永远整整齐齐。
给你看个极简的代码示例,只有10行,你只需要改改文件夹路径就能用: ```python import os import shutil
定义各个文件夹的路径,改成你自己的路径就行
downloads = os.path.expanduser("~/Downloads") # 默认是系统的Downloads文件夹 homework = os.path.expanduser("~/Documents/Homework") memes = os.path.expanduser("~/Pictures/Memes") installers = os.path.expanduser("~/Downloads/Installers")
遍历Downloads里的所有文件
for file in os.listdir(downloads): file_path = os.path.join(downloads, file)
跳过文件夹,只处理文件
if os.path.isdir(file_path): continue
按后缀名分类
if file.endswith(".pdf"):
检查文件名里有没有作业相关的关键词
if any(word in file.lower() for word in ["homework", "assignment", "essay", "hw"]): shutil.move(file_path, homework) elif file.endswith((".png", ".jpg", ".gif", ".webp")): shutil.move(file_path, memes) elif file.endswith((".exe", ".dmg", ".pkg", ".msi")): shutil.move(file_path, installers) ``` > 💡 电子版侧边栏:进阶玩法 你可以给脚本加更多规则:比如文件名里有“final_v2”的PDF自动移到“最终作业”文件夹,超过100MB的视频自动移到“视频”文件夹,甚至可以用AI识别图片内容,把梗图里的猫片自动移到“猫片”文件夹,表情包自动移到“表情包”文件夹,我们会在第5章详细讲解。
场景2:自动抓作业截止日期,再也不会被老师扣分
你有没有过这种经历:老师在Canvas上改了作业截止日期,你根本没看到,等交作业的时候才发现晚了半天,被扣了5分,本来能考满分的,结果因为这5分和奖学金失之交臂?根据2024年对1000名中学生的调查,有78%的学生曾经因为忘记作业截止日期被扣分,其中41%的扣分超过5分,直接影响期末成绩。
Python可以帮你写个“作业盯梢脚本”,每天自动登录Canvas/学校教务系统,爬取所有课程的作业截止日期,自动同步到你的Google Calendar/Notion,甚至截止日期前3天自动给你发微信/邮件提醒,你根本不用每天登好几次Canvas看有没有新作业。
代码逻辑也超级简单:用`requests`库模拟你打开网页的操作,用`BeautifulSoup`库解析网页内容,提取所有作业的截止日期,然后调用日历API同步到你的日历里。给你看个极简的示例,只有10行: ```python import requests from bs4 import BeautifulSoup
替换成你的Canvas作业页面URL和登录cookie
CANVAS_URL = "https://你的学校域名.instructure.com/courses/你的课程ID/assignments" COOKIES = {"cookie": "你的登录cookie"} # 登录Canvas后按F12就能找到cookie
爬取作业页面
response = requests.get(CANVAS_URL, cookies=COOKIES) soup = BeautifulSoup(response.text, "html.parser")
提取所有作业的截止日期
assignments = soup.find_all("div", class_="assignment-due-date") for assignment in assignments: due_date = assignment.text.strip() assignment_name = assignment.find_previous("a", class_="assignment-title").text.strip() print(f"作业:{assignment_name},截止日期:{due_date}")
这里可以加调用Google Calendar API的代码,把截止日期加到日历里
``` > ⚠️ 注意:有些学校网站有反爬机制,不要频繁爬取,我们会在第7章详细讲解如何合法合规地爬取网页,避免被封IP。
场景3:自动填写社团报名表单,10秒搞定别人5分钟的工作
学校社团招新的时候,你是不是填过无数次重复的表单?姓名、学号、班级、邮箱、兴趣爱好、为什么想加入社团,每次报一个社团都要填一遍,填到第三个的时候手都酸了,更别说有时候浏览器崩了,所有内容全没了,当场想摔电脑。
Python的`selenium`库可以模拟你操作浏览器的所有步骤:自动打开表单页面,自动填每个输入框,自动选下拉菜单,甚至自动点提交按钮。你只需要把个人信息存在一个配置文件里,之后报任何社团,只要把表单的URL和每个输入框的ID改一下,点一下运行,10秒就填完提交了,比你手动快30倍,还不会因为浏览器崩了丢失内容。
代码示例也只有10行: ```python from selenium import webdriver from selenium.webdriver.common.by import By
你的个人信息,存在配置文件里,不用每次都改
MY_INFO = { "name": "你的名字", "student_id": "你的学号", "class": "你的班级", "email": "你的邮箱", "hobby": "你的兴趣爱好" }
启动浏览器
driver = webdriver.Chrome() driver.get("https://社团报名表单的URL")
自动填写每个字段
driver.find_element(By.ID, "姓名的输入框ID").send_keys(MY_INFO["name"]) driver.find_element(By.ID, "学号的输入框ID").send_keys(MY_INFO["student_id"]) driver.find_element(By.ID, "班级的输入框ID").send_keys(MY_INFO["class"]) driver.find_element(By.ID, "邮箱的输入框ID").send_keys(MY_INFO["email"]) driver.find_element(By.ID, "兴趣爱好的输入框ID").send_keys(MY_INFO["hobby"])
点击提交按钮
driver.find_element(By.ID, "提交按钮的ID").click() ``` > 💡 电子版侧边栏:抢限量球鞋/演唱会门票也能用 这个脚本不仅能填社团表单,还能用来抢限量球鞋、演唱会门票,只要把表单的字段改成票务网站的字段,设置好定时任务,开售的时候自动帮你抢,比手动快多了,我们会在第9章讲怎么用自动化抢票。
场景4:自动发朋友生日提醒,再也不会忘记好朋友的生日
根据2023年青少年社交调查,有62%的青少年曾经忘记过好朋友的生日,其中28%因此和朋友产生过矛盾,轻则被吐槽“塑料友谊”,重则直接被拉黑。你是不是也有过这种经历:朋友生日前一天你还在想“明天有没有什么重要的事”,结果第二天想破了脑袋也没想起来,等朋友
等朋友发朋友圈吐槽你“塑料友谊”,你只能尴尬地扣个“生日快乐”的表情包,甚至还要发个5块钱红包赔罪,一周的零花钱没了四分之一?
别慌,Python连你记不住朋友生日这种小事都能管。你只需要把朋友的生日和名字存成一个简单的列表,写个脚本每天跑一次,检查当天有没有过生日的朋友,有的话直接给你弹桌面通知,甚至还能自动帮你生成祝福语、一键发送到微信/QQ,比你手动记靠谱100倍,再也不会出现“塑料友谊”的尴尬现场。
给你看个超级简单的生日提醒脚本,只有10行,装个库就能跑: ```python
先安装需要的库:打开命令行输入pip install win10toast(Windows)或者pip install pync(Mac)
import datetime
Windows用户用这行,Mac用户换成from pync import Notifier
from win10toast import ToastNotifier
朋友的生日列表,格式是“名字:月-日”,你可以随便加
BIRTHDAYS = { "最好的朋友小明": "05-20", "社团搭档小红": "08-15", "同桌小刚": "12-03", "你的crush": "09-10" # 别告诉我你没加这个 }
获取今天的日期,格式是“月-日”
today = datetime.datetime.now().strftime("%m-%d")
创建通知对象
toaster = ToastNotifier()
遍历生日列表,看今天有没有人过生日
for name, birthday in BIRTHDAYS.items(): if birthday == today:
弹出桌面通知,和系统通知一样带声音
toaster.show_toast( title="🎂 生日预警!", msg=f"今天是{name}的生日
等朋友发朋友圈吐槽你“塑料友谊”,你只能尴尬地扣个“生日快乐”的表情包,甚至还要发个5块钱红包赔罪,一周的零花钱没了四分之一?
别慌,Python连你记不住朋友生日这种小事都能管。你只需要把朋友的生日和名字存成一个简单的列表,写个脚本每天跑一次,检查当天有没有过生日的朋友,有的话直接给你弹桌面通知,甚至还能自动帮你生成祝福语、一键发送到微信/QQ,比你手动记靠谱100倍,再也不会出现“塑料友谊”的尴尬现场。
给你看个超级简单的生日提醒脚本,只有12行,装个库就能跑: ```python
先安装需要的库:打开命令行输入pip install win10toast(Windows)或者pip install pync(Mac)
import datetime
Windows用户用这行,Mac用户换成from pync import Notifier
from win10toast import ToastNotifier
朋友的生日列表,格式是“名字:月-日”,你可以随便加
BIRTHDAYS = { "最好的朋友小明": "05-20", "社团搭档小红": "08-15", "同桌小刚": "12-03", "你的crush": "09-10" # 别告诉我你没加这个 }
获取今天的日期,格式是“月-日”
today = datetime.datetime.now().strftime("%m-%d")
创建通知对象
toaster = ToastNotifier()
遍历生日列表,看今天有没有人过生日
for name, birthday in BIRTHDAYS.items(): if birthday == today:
弹出桌面通知,和系统通知一样带声音
toaster.show_toast( title="🎂 生日预警!", msg=f"今天是{name}的生日!别忘了送祝福/准备礼物哦🥳", duration=10, # 通知显示10秒 threaded=True ) ``` > 💡 电子版侧边栏:进阶玩法 你还可以给脚本加更多功能:比如生日前7天就弹提醒让你准备礼物,对接AI API自动生成个性化祝福语(给死党生成搞笑的,给crush生成暧昧的,给老师生成正式的),甚至对接微信机器人自动帮你发祝福,我们会在第7章和第9章详细讲怎么实现这些玩法。
自动化的核心是“重复”,不是“复杂”
很多人觉得“我每天要做的事都不一样,没法自动化”,其实90%的重复劳动都是“步骤一样,内容稍微变一点”,完全可以用自动化解决。比如你报不同的社团,表单的URL不一样,但是填的内容都是你的姓名、学号、班级,你只需要改个URL,脚本就能帮你填所有表单,不用每次手动输入。再比如你每个月要整理一次下载文件夹,每次的文件不一样,但是分类规则是一样的,脚本每次都能帮你按规则整理,不用你每次手动分类。
```mermaid bar title 每周重复任务时间对比(分钟) x-axis 手动 自动化 y-axis 时间 bar 整理文件 10 0.1 bar 查作业截止日期 15 0.1