你是不是也同样感到了厌倦, 因为每天上班的时候, 都会被各式各样的机械而且重复的文件操作给缠住? 有没有觉得自己更像是一个高级的文件搬运工, 而不是一个能够解决问题的工程师呢?
实际上, 很多那些枯燥的日常任务, 只需要用上几行简单的脚本就可以轻松地把它们搞定好, 这样的话就能把时间还给真正重要的事情上去。
下面我要分享 10 个确实是在实际使用中, 经常会被拿来使用的小型脚本, 每一个小型脚本的目标都非常明确, 那就是为了解决某一个非常具体的、让人头疼的问题点。
这些代码的设计既简单又清晰, 非常容易理解, 对于用户来说, 唯一需要做的操作是非常少的, 只需要去修改其中的几个地址路径, 或者调整一下相关的参数设定, 随后就可以立刻将这些工具投入运行并使用起来了。
1. 自动整理下载/桌面文件
每天一睁眼就要去直面那些杂乱无章的下载文件夹或者桌面, 这找文件的活儿就干得格外费劲, 而这个脚本它就能照着文件类型的不同, 去自动做归类的事情, 这就等于能把图片、把文档、再把压缩包,一个一个地分别放进它们各自对应的子文件夹里面。
import os, shutilfrom pathlib import Path
base = Path(r"C:\Users\me\Downloads") # 换成你自己的
rules = {
"图片": [".png", ".jpg", ".jpeg"],
"文档": [".pdf", ".docx", ".txt"],
"压缩包": [".zip", ".rar", ".7z"],
}
for file in base.iterdir():
if not file.is_file():
continue
for folder, exts in rules.items():
if file.suffix.lower() in exts:
target_dir = base / folder
target_dir.mkdir(exist_ok=True)
shutil.move(str(file), target_dir / file.name)
break
2. 进行批量重命名文件的操作, 以便实现统一添加日期前缀的目的。
在处理数量很多截图或者是临时文件的过程当中, 制定一个清楚明了的命名规则是特别要紧的一件事情, 这个脚本的作用是什么呢, 它会对指定 内的所有文件都进行一种操作, 就是把当日的日期作为前缀加到这些文件的文件名前面去, 举个例子来说就是会生成类似 2024-01-.png 这样的文件名格式。
import os, datetimefolder = r"C:\Users\me\Pictures"
today = datetime.date.today().isoformat()
for name in os.listdir(folder):
old = os.path.join(folder, name)
if not os.path.isfile(old):
continue
new_name = f"{today}_{name}"
new = os.path.join(folder, new_name)
os.rename(old, new)
3. 自动清理N天前的旧日志文件
因为服务器上面的这个应用日志它如果不进行定期的那种清理操作的话, 那么这个磁盘空间就会很快的就被占满掉了。所以这个脚本来帮助大家完成一个工作, 就是去删除在这个指定的目录底下, 那个时间已经超过了指定天数(比如说7天)的所有的那些以.log为结尾的文件。
import os, timefrom pathlib import Path
log_dir = Path("/var/log/myapp")
days = 7
expire = time.time() - days * 24 * 3600
for f in log_dir.glob("*.log"):
if f.stat().st_mtime < expire:
print("删除", f)
f.unlink()
4. 每日自动备份重要目录到压缩包
对于工作文档、项目源码等关键数据, 定期地进行备份这件事是绝对不能缺少的, 这个脚本的主要功能是专门去把指定好的那一个目录给压缩起来, 最后形成的结果是以当天那一天的日期命名的一个ZIP包, 这样的做法呢, 主要就是为了方便后来的归档操作。
import zipfile, datetimefrom pathlib import Path
src = Path(r"D:\work_docs")
backup_dir = Path(r"D:\backup")
backup_dir.mkdir(exist_ok=True)
name = datetime.date.today().isoformat() + ".zip"
zip_path = backup_dir / name
with zipfile.ZipFile(zip_path, "w", zipfile.ZIP_DEFLATED) as zf:
for p in src.rglob("*"):
if p.is_file():
zf.write(p, p.relative_to(src))
5. 合并多个CSV文件
在把数据进行分析的时候, 人们经常会碰到这种情况, 就是把那些每天都要或者是每个星期都要被导出来的许多种CSV格式的报表文件, 给合并放到一起变成单独的一个文件。这个脚本不需要什么第三方的软件库就能够帮忙, 能够高效率地把这个合并任务给完成掉。
import csv, globfiles = glob.glob(r"D:\reports\2024-01-*.csv")
out = r"D:\reports\all_2024-01.csv"
header_written = False
with open(out, "w", newline="", encoding="utf-8") as fout:
writer = None
for f in files:
with open(f, newline="", encoding="utf-8") as fin:
reader = csv.reader(fin)
header = next(reader, None)
if header and not header_written:
writer = csv.writer(fout)
writer.writerow(header)
header_written = True
for row in reader:
writer.writerow(row)
6. 按照规定的时间点, 发送内容比较简单易懂的电子邮件通知。
你可以给自己设定一些工作方面的提醒事项, 这其中包括在下班之前去撰写日报这一类的事情, 也包含每周都要参加的周会这类事务。有关这个脚本, 它是利用SMTP协议来发送邮件功能的, 所以它可以和系统的定时任务功能结合起来一块使用。
import smtplibfrom email.mime.text import MIMEText
smtp_host =
user =
password = "你的授权码"
msg = MIMEText("下班前记得写日报!
", "plain", "utf-8")
msg["Subject"] = "小提醒"
msg["From"] = user
msg["To"] = user
with smtplib.SMTP_SSL(smtp_host, 465) as s:
s.login(user, password)
s.send_message(msg)
7. 搜索项目代码里包含的特定关键字, 并且把相关情况汇总起来形成一份报告。
如果你想要快速地从代码库里找出所有的 TODO 和 FIXME 这类的注释, 或者是某一个特定的函数被调用到了, 那么你可以使用这个脚本, 它会把每一个 .py 文件都遍历一遍, 然后生成一个报告在里面包含好有问题的文件名字是哪几个, 它们的行号是在多少行上面, 还有那些内容具体是什么样子的, 这样就简明扼要地呈现出来了。
from pathlib import Pathroot = Path(r"D:\code\my_project")
keyword = "TODO"
result = []
for p in root.rglob("*.py"):
for i, line in enumerate(p.read_text(encoding="utf-8", errors="ignore").splitlines(), start=1):
if keyword in line:
result.append(f"{p}:{i}: {line.strip()}")
report = "\n".join(result)
Path("todo_report.txt").write_text(report, encoding="utf-8")
8. 对于简易的网站建设, 进行存活状况监控。
请问你须不需要对测试环境里的状况, 或者对若干关键服务的健康状态, 展开监控工作? 这个极其简易版本的监控脚本, 它会以一定的时间间隔, 去访问那个包含了指定网址内容的列表, 并且将所检测到的状态码信息, 或者是出现的异常情况提示内容, 直接打印在屏幕上展示给用户看。
import requests, timeurls =
while True:
for url in urls:
try:
r = requests.get(url, timeout=3)
print(time.strftime("%H:%M:%S"), url, r.status_code)
except Exception as e:
print(time.strftime("%H:%M:%S"), url, "DOWN", e)
time.sleep(60)
9. 一键处理并命名PPT图片素材
在准备演示文稿的时候呢, 由于从各个地方收集来的图片素材它们的命名非常混乱, 所以这个脚本的作用就是自动地把那些存在于桌面上的图片文件全都移动到已经被指定好的文件夹里面去, 并且还要按照一定的顺序来进行重命名操作, 比如说把文件名改成带有 .png 这样的格式。
import os, shutilsrc = r"C:\Users\me\Desktop"
dst = r"C:\Users\me\Desktop\ppt_imgs"
os.makedirs(dst, exist_ok=True)
for i, name in enumerate(os.listdir(src), start=1):
if not name.lower().endswith((".png", ".jpg", ".jpeg")):
continue
old = os.path.join(src, name)
new = os.path.join(dst, f"slide_{i:03d}.png")
shutil.move(old, new)
10. 把工作中的那些事儿, 尽快地记下来, 写成日志。
人们常说好记性不如烂笔头, 这个脚本的意思就是利用命令行里面进行的交互操作来让你能够迅速地记录下面前已经完成的工作步骤或者脑子里冒出来的想法内容, 它还会自动加上对应的时间戳信息, 随后把这些带时间印记的数据统一保存到一个日志文件里去。
from pathlib import Pathimport datetime
log = Path(r"D:\life\work_log.txt")
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
text = input("今天干了啥?
:")
log.parent.mkdir(parents=True, exist_ok=True)
with log.open("a", encoding="utf-8") as f:
f.write(f"[{now}] {text}\n")
以上就是这 10 个其实用的小脚本。它们的目标非常明确, 那就是帮你把那些琐碎、重复且容易出错的手工操作给自动化掉。你完全可以从最让你困扰的那个实际任务开始做起, 先把代码复制下来, 再把路径修改为实际需要使用的路径, 随后试运行一下效果。
更进一步的改进方式, 则是把它们加入到任务计划或者 Linux 系统的 cron 调度工具里, 这样就可以实现真正意义上的全自动执行了。
你要是对这些用来提高办事效率的小办法感兴趣的话, 又或者想要知道怎样把几个单独的脚本连在一起做成更厉害的一整套工具的话, 就请到云栈社区里面去和别的那些写代码的人一块儿交流一下各自的心得体会。
你要晓得, 真正好用的家伙事儿, 并不是看它有多复杂, 而是要看它能不能真的把你的干活的速度给放开, 让你自己不那么累, 这才是关键的地方。