用 Python 写了几个小脚本,把每周重复的事全自动化了
【摘要】 程序员最不该亲手干的,就是重复的人工活。本文分享我用几十行 Python 脚本搞定的几件日常琐事,批量重命名、定时拉报表、监控接口,附可抄的代码。
平常遇到每日每周都需要做的事情,做了几天之后总想着看看能不能用自动化脚本给替代了,这也算程序员的职业病了吧哈哈
一、第一个脚本:批量改文件名
公司同事因为项目交流经常会扔给我一个文件夹,几百张图,命名乱七八糟,要统一成 项目名_序号.jpg。我前几天都是手动改的,改到手抽筋。过几天就写了这个:
import os
folder = './photos'
for i, name in enumerate(sorted(os.listdir(folder)), 1):
ext = os.path.splitext(name)[1]
new = f'项目A_{i:03d}{ext}'
os.rename(os.path.join(folder, name), os.path.join(folder, new))
print('搞定,喝口水')
十几行,以后这种活双击一下就行。你说这功能操作系统也能批量改?是能,但规则一复杂(按拍摄时间、按内容分类)脚本更灵活,而且我能复用。
二、第二个脚本:每天自动拉报表发邮件
有个日报,要从数据库拉数、拼成 Excel、发邮件给领导。以前每天早上一来先搞这个比较麻烦。直接定时任务 + 脚本:
import smtplib, pandas as pd
from email.mime.text import MIMEText
from apscheduler.schedulers.blocking import BlockingScheduler
def send_report():
df = pd.read_sql('SELECT * FROM orders WHERE created_at = CURDATE()', conn)
df.to_excel('/tmp/daily.xlsx', index=False)
# 发邮件略,就是 smtplib 那套
print('日报已发')
sched = BlockingScheduler()
sched.add_job(send_report, 'cron', hour=9) # 每天9点
sched.start()
从此早上到公司,邮件已经在那了。这种"定时 + 重复"的活,最适合交给脚本。
三、第三个脚本:盯接口是不是挂了
我们有个内部接口偶尔抽风。我写了个每隔几分钟探活的小脚本,挂了就系统就发消息了:
import requests, time
while True:
try:
r = requests.get('https://api.xxx.com/health', timeout=5)
if r.status_code != 200:
alert(f'接口不对劲,状态码 {r.status_code}')
except Exception as e:
alert(f'接口挂了:{e}')
time.sleep(300) # 5 分钟探一次
比天天手动点开看强太多了,而且人睡觉它也不用睡觉。
四、踩过的一些小坑
- 路径写死。早期脚本路径写死我电脑,换台机器就崩。后来全改成读配置文件 / 命令行参数。
- 异常没接住。有次脚本半夜因为个网络抖动直接退出,监控空窗。加了个 try 和重连才好。
- 忘了日志。脚本跑没跑成功全凭感觉,后来都加了简单的日志,出问题能查。
五、我的体会
自动化这事儿,门槛比想象低。你不需要多高深,会点基础语法、会调几个库,就能把日常每天还得关注的事情那点重复活干掉。省下来的时间,拿去摸鱼不香吗(划掉)拿去学点真东西不香吗哈哈。
关键是别追求一步到位。我这些脚本都是先写个能跑的版本,遇到新需求再补。写着写着,你自己的脚本就更完善了。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)