别再急着 pip install:三个标准库模块就能搞定日常文件处理

很多人一写 Python 脚本处理文件,第一反应就是 pip install 某个第三方库。但在动手之前,不妨先看看标准库里已经躺着三件趁手的工具:osshutilglob。它们加起来不需要任何额外依赖,却足以覆盖日常文件处理里八成以上的场景。这篇文章就用实例走一遍,看看它们到底能干什么。

用 glob 一行代码批量找文件

glob 模块的作用是用通配符匹配文件路径,本质上是把 shell 里的 *.txt 搬进了 Python。它最大的价值是省去手写递归遍历的代码。

1
2
3
4
5
6
7
8
9
import glob

# 找出当前目录下所有 md 文件
md_files = glob.glob("*.md")

# 递归匹配:找出 _posts 目录下所有 .md,包括子目录
all_posts = glob.glob("hexo/source/_posts/**/*.md", recursive=True)

print(len(all_posts))

** 配合 recursive=True 就能实现递归查找,比 os.walk 手写循环直观得多。如果要按多个条件筛选,glob 的返回结果本身就是普通列表,直接丢给列表推导式继续过滤即可,比如只要文件名里带”备份”的。

用 shutil 完成复制、移动和删除

shutil 是”高级文件操作”的集合,日常用的高频操作全在这里:copy2 复制并保留元数据、move 移动(跨盘时自动降级为复制+删除)、rmtree 递归删除目录。

1
2
3
4
5
6
7
8
9
10
import shutil

# 复制文件(保留修改时间等元数据)
shutil.copy2("report.pdf", "archive/report-2026.pdf")

# 移动文件到归档目录(目标目录需已存在)
shutil.move("tmp/download.zip", "archive/")

# 递归删除整个目录树
shutil.rmtree("old_backup")

这里有个经常踩的坑:shutil.move 的目标目录如果不存在,它不是帮你创建,而是把源文件直接”重命名”成目标路径,导致文件跑到了意想不到的地方。所以移动前先 os.makedirs(dst, exist_ok=True) 才是稳妥写法。

用 os 遍历目录与批量改名

os 模块负责最底层的路径和目录操作。批量改名是它最常见的用途,配合 os.rename 和一点字符串处理,几行代码就能把一堆杂乱命名的文件整理整齐。

1
2
3
4
5
6
7
8
9
import os

os.makedirs("sorted", exist_ok=True)

for name in os.listdir("downloads"):
if name.endswith(".jpg"):
new_name = "IMG_" + name.replace(" ", "_").lower()
os.rename(os.path.join("downloads", name),
os.path.join("sorted", new_name))

需要逐级遍历目录时,os.walk 会依次产出 (当前目录, 子目录列表, 文件列表) 三元组,配合 os.path.getsize 可以统计目录体积、找超大文件:

1
2
3
4
5
6
for root, _, files in os.walk("."):
for f in files:
p = os.path.join(root, f)
size = os.path.getsize(p)
if size > 100 * 1024 * 1024: # 超过 100MB
print(p, f"{size/1024/1024:.1f} MB")

综合案例:把散落的图片按月份归档

把三件套组合起来,就是一个能直接用的归档脚本:扫描某目录下所有图片,按修改月份归入对应子目录。

1
2
3
4
5
6
7
8
9
10
11
import glob, os, shutil
from datetime import datetime

for p in glob.glob("downloads/**/*.jpg", recursive=True):
mtime = os.path.getmtime(p)
month = datetime.fromtimestamp(mtime).strftime("%Y-%m")
dest = os.path.join("photos", month)
os.makedirs(dest, exist_ok=True)
shutil.move(p, os.path.join(dest, os.path.basename(p)))

print("归档完成")

整个过程只用了标准库:glob 负责找文件,os 负责时间戳和建目录,shutil 负责移动。没有 pip install,没有虚拟环境,在任何有 Python 的机器上都能直接跑。

总结

glob 让”找文件”变得一行搞定,shutil 把复制、移动、删除封装得安全可靠,os 提供了底层遍历和命名的全部能力。三者分工明确又互相配合,足以应付绝大多数日常文件批处理。下次动手写脚本前,先想想这三个老朋友,很可能根本不需要引入任何第三方依赖——少装一个包,就少一份版本冲突和安全隐患。


别再急着 pip install:三个标准库模块就能搞定日常文件处理
https://wumingmr.github.io/2026/08/19/别再急着-pip-install:三个标准库模块就能搞定日常文件处理/
作者
无名
发布于
2026年8月19日
许可协议