每天下班回家,你是不是也会干这些事:整理下载的乱七八糟文件、给今天的照片改个名字、把作业打包发给老师…这些事手点一次两次还好,多了真的很烦。 我后来干脆写了 10 个 Python 小脚本,专门干这些“脏活累活”,人只负责开心。
下面这几个都不难,你照着改一改就能用上。
思路很简单:按后缀把文件丢进不同子目录里,比如图片、文档、压缩包。
import os, shutil
from pathlib import Path
base = Path(r"C:\Users\xxx\Downloads")
rules = {
"图片": [".jpg", ".png", ".gif"],
"文档": [".pdf", ".docx", ".pptx", ".txt"],
"压缩": [".zip", ".rar", ".7z"]
}
for f in base.iterdir():
ifnot f.is_file():
continue
ext = f.suffix.lower()
for folder, exts in rules.items():
if ext in exts:
target_dir = base / folder
target_dir.mkdir(exist_ok=True)
shutil.move(str(f), target_dir / f.name)
break
扔进 python 跑一下,你的 Downloads 当场瘦身。
假设你手机导出来一堆 IMG_1234.JPG,看着就不想整理。脚本帮你统一改成 20250121_001.jpg 这种。
from pathlib import Path
import time
folder = Path(r"C:\pics")
date = time.strftime("%Y%m%d")
for i, f in enumerate(sorted(folder.glob("*.jpg")), start=1):
new_name = f"{date}_{i:03d}{f.suffix.lower()}"
f.rename(f.with_name(new_name))
改下 folder 路径就能跑。
硬盘老说满,其实就是几个超大的文件在作妖。让脚本帮你把“罪魁祸首”揪出来。
from pathlib import Path
root = Path(r"D:\")
limit_mb = 500
for f in root.rglob("*"):
if f.is_file():
size_mb = f.stat().st_size / 1024 / 1024
if size_mb > limit_mb:
print(f"{size_mb:8.1f} MB -> {f}")
一跑就知道该删谁了。
每次交作业都手动选文件打 zip 很烦,用脚本按时间戳自动打包。
import zipfile, time
from pathlib import Path
src = Path(r"C:\code\homework")
ts = time.strftime("%Y%m%d_%H%M%S")
zip_path = src.parent / f"homework_{ts}.zip"
with zipfile.ZipFile(zip_path, "w", zipfile.ZIP_DEFLATED) as zf:
for f in src.rglob("*"):
if f.is_file():
zf.write(f, f.relative_to(src))
print("打包完毕:", zip_path)
以后发邮件就直接选最新的那个 zip。
最简单粗暴的版本:把任务写在 todo.txt 里,脚本每天早上读一遍打印出来,你开机顺手跑一下。
from pathlib import Path
todo_file = Path("todo.txt")
if todo_file.exists():
print("今天要做的事:\n")
print(todo_file.read_text(encoding="utf-8"))
else:
print("还没有 todo.txt,先写一点目标吧~")
后面你可以再加上定时任务、桌面通知之类的,就成小工具了。
比如你有一堆 app-2025-01-21.log,想合成一个大日志方便搜索。
from pathlib import Path
log_dir = Path(r"C:\logs")
target = log_dir / "all.log"
with target.open("w", encoding="utf-8") as out:
for f in sorted(log_dir.glob("app-*.log")):
out.write(f"\n===== {f.name} =====\n")
out.write(f.read_text(errors="ignore"))
线上排查那种诡异 Bug 的时候,先用脚本把日志合好再分析,会比人肉点文件舒服太多。
学校/公司经常发一堆 xlsx,需要喂给只认 csv 的系统。
from pathlib import Path
import pandas as pd # 需要先 pip install pandas openpyxl
folder = Path(r"C:\data\xlsx")
for f in folder.glob("*.xlsx"):
df = pd.read_excel(f)
csv_path = f.with_suffix(".csv")
df.to_csv(csv_path, index=False, encoding="utf-8-sig")
print("导出:", csv_path)
一键全转,告别手动“另存为”。
发 PPT、作业附件太大上传不了,可以先把图片压一压。
from pathlib import Path
from PIL import Image # pip install pillow
src = Path(r"C:\pics\raw")
dst = Path(r"C:\pics\small")
dst.mkdir(exist_ok=True)
for f in src.glob("*.jpg"):
img = Image.open(f)
img.save(dst / f.name, quality=70, optimize=True)
质量 70 一般肉眼看不出差别,体积能小不少。
比如你有一堆 txt 笔记,想搜里面有没有某个关键字。
from pathlib import Path
root = Path(r"C:\notes")
keyword = input("想搜啥:")
for f in root.rglob("*.txt"):
text = f.read_text(encoding="utf-8", errors="ignore")
if keyword in text:
print("命中:", f)
虽然比不上专业全文检索,但日常用够了。
写作业/刷题用这个挺好。
import time
mins = 25
print(f"开始专注 {mins} 分钟…")
time.sleep(mins * 60)
print("时间到!活动一下再继续~")
你可以再配合系统自带的通知音,或者做成小窗口,就很有仪式感。
这 10 个其实都不算“高级算法”,更多是:一点点逻辑(条件、循环)+ 文件/网络库 的组合。但一旦你开始用脚本接管这些重复动作,会很直观地感觉到: “啊,原来学编程,最先改变的是自己的生活。”
你可以先挑一两个最有感觉的改一改,把自己的路径、习惯塞进去,跑通之后,再慢慢把它们做成自己的“小工具箱”。等哪天排查线上问题、看一堆日志头大的时候,就知道这些基础脚本有多香了。