编程学习网 > 编程语言 > Python > 10 个 Python 脚本,把每天那些破事自动干掉!
2026
09-04

10 个 Python 脚本,把每天那些破事自动干掉!


有些活写进需求里叫功能,没写进需求里就叫手工操作

批量改文件名、扫日志、清目录、对 Excel、测接口、备份文件……单看一个都不难,烦的是它隔三差五就来一次。手动干十分钟也能干,但这种十分钟我一般不想给。

Python 特别适合收拾这些零碎活。代码不用写得多漂亮,能稳定替你干活就行。

1、批量整理下载目录

下载目录最容易变垃圾场。PDF、图片、压缩包全堆一起,我一般直接按后缀归档。

from pathlib import Path
root = Path.home() / "Downloads"
for f in root.iterdir():
    if not f.is_file():
        continue
    ext = f.suffix.lower().replace(".", "") or "other"
    target = root / ext
    target.mkdir(exist_ok=True)
    f.rename(target / f.name)

这种脚本别上来就 os.system("mv ..."),文件名里碰上空格、特殊字符,又得给自己找事。

2、批量重命名文件

测试导出来几百张图片,名字全是 IMG_20260817_xxx,人工改我是不可能改的。

from pathlib import Path
folder = Path("./screenshots")
for no, f in enumerate(sorted(folder.glob("*.png")), 1):
    new_name = folder / f"bug_case_{no:03d}.png"
    f.rename(new_name)

真要跑生产文件,建议先把 rename 改成 print,确认一遍结果。批处理脚本最怕的不是报错,是没报错但改错了。

3、从日志里捞 ERROR

几十 MB 的日志别用编辑器硬开,我通常先把异常行单独切出来。

from pathlib import Path
src = Path("service.log")
dst = Path("error_only.log")
with src.open(encoding="utf-8", errors="ignore") as r, \
     dst.open("w", encoding="utf-8") as w:
    for line in r:
        if "ERROR" in line or "Traceback" in line:
            w.write(line)

如果线上已经有 ELKLoki,这脚本意义不大。但临时拿到一份离线日志时,非常顺手。

4、批量检查 URL 是否挂了

文档里几十个接口地址,逐个点开检查很蠢。

import requests
urls = [
    "https://example.com/health",
    "https://api.example.com/ping",
]
for url in urls:
    try:
        resp = requests.get(url, timeout=3)
        print(resp.status_code, url)
    except requests.RequestException as e:
        print("FAIL", url, type(e).__name__)

这里一定要加 timeout。不加超时的巡检脚本,我第一眼就不太信,它自己都有可能巡检到卡死。

5、自动备份配置文件

NginxDocker Compose、应用配置之前,我喜欢先留一份带时间戳的备份。

from datetime import datetime
from pathlib import Path
import shutil
src = Path("/etc/nginx/nginx.conf")
stamp = datetime.now().strftime("%Y%m%d_%H%M%S")
dst = Path("/data/backup") / f"nginx_{stamp}.conf"
dst.parent.mkdir(parents=True, exist_ok=True)
shutil.copy2(src, dst)

出了问题能不能快速回滚,比你当时改配置有多自信重要得多。

6、清理过期临时文件

服务器磁盘慢慢涨,很多时候不是业务数据,就是没人管的临时文件。

import time
from pathlib import Path
expire = time.time() - 7 * 86400
for f in Path("/data/tmp").glob("*.tmp"):
    if f.is_file() and f.stat().st_mtime < expire:
        f.unlink()

删除类脚本我会把目录写死,不接受随便传一个路径进来。自动化可以省事,权限给太大就是事故制造机。

7CSV 按条件拆文件

运营丢过来一个大 CSV,只要失败记录,没必要人工筛。

import csv
with open("result.csv", encoding="utf-8") as r, \
     open("failed.csv", "w", newline="", encoding="utf-8") as w:
    rows = csv.DictReader(r)
    out = csv.DictWriter(w, fieldnames=rows.fieldnames)
    out.writeheader()
    for row in rows:
        if row["status"] != "success":
            out.writerow(row)

这种一次性的字段清洗任务,Python 比开 Excel 点半天稳得多。

8、批量检查文件 MD5

发包、迁移文件时,我不太喜欢靠文件大小一样判断有没有传坏。

import hashlib
from pathlib import Path
def md5(path):
    h = hashlib.md5()
    with Path(path).open("rb") as f:
        while chunk := f.read(1024 * 1024):
            h.update(chunk)
    return h.hexdigest()
print(md5("release.zip"))

大文件按块读,别一把 read() 全塞内存。这种细节平时没感觉,碰到几个 GB 的包马上教做人。

9、定时检查磁盘空间

磁盘满这种故障很烦,因为前面通常一点声音没有。

import shutil
total, used, free = shutil.disk_usage("/")
used_rate = used / total * 100
if used_rate > 85:
    print(f"磁盘告警{used_rate:.1f}%")

实际使用时把 print 换成企业微信、钉钉或者邮件通知,再丢到 cron 里跑就够了。

10、找出两个目录缺了哪些文件

迁移附件、备份图片之后,我一般都会再做一次文件名对账。

from pathlib import Path
old = {f.name for f in Path("./source").rglob("*") if f.is_file()}
new = {f.name for f in Path("./target").rglob("*") if f.is_file()}
for name in sorted(old - new):
    print("缺失:", name)

真要严格一点,再加文件大小和 MD5,别只比较文件名。

我现在写这种脚本有个习惯:一次只解决一个麻烦。

别一开始就整配置中心、线程池、Web 页面、任务调度,最后一个 20 行能解决的问题,被自己写成了一个小平台

能跑,能看懂,出错时知道它干到哪一步,再配个 cron

这种 Python 脚本才是真的省时间。

以上就是“10 个 Python 脚本,把每天那些破事自动干掉!的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。   

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取