平时下载的剧集、照片经常带着乱七八糟的文件名,手动改名又慢又容易错。这篇用 Python 标准库写一个小脚本,几行代码批量重命名整个文件夹。
核心思路
用 os.listdir() 遍历目录,用 os.rename() 改名。下面这个例子把文件夹里所有 .mp4 改成统一格式:
import os
folder = r'D:\Downloads\course' # 目标文件夹
prefix = 'Python课程_'
for index, filename in enumerate(os.listdir(folder), start=1):
name, ext = os.path.splitext(filename)
if ext.lower() != '.mp4':
continue
new_name = f'{prefix}{index:02d}{ext}'
os.rename(os.path.join(folder, filename), os.path.join(folder, new_name))
运行后文件会变成 Python课程_01.mp4、Python课程_02.mp4……
进阶版:先预览,再执行
直接改名有风险,更稳妥的做法是让脚本先给出「改名计划」,确认无误再执行:
import os
def plan_rename(folder, pattern):
"""pattern 示例:'海贼王_S01E{:02d}',返回 [(旧名, 新名), ...]"""
files = sorted(f for f in os.listdir(folder) if not f.startswith('.'))
plan = []
for index, filename in enumerate(files, start=1):
ext = os.path.splitext(filename)[1]
plan.append((filename, pattern.format(index) + ext))
return plan
def apply_rename(folder, plan):
for old, new in plan:
os.rename(os.path.join(folder, old), os.path.join(folder, new))
# 第一步:生成改名计划(只看不改)
plan = plan_rename(r'D:\Downloads\anime', '海贼王_S01E{:02d}')
# 第二步:确认无误后真正执行
apply_rename(r'D:\Downloads\anime', plan)
在交互式解释器里先看看计划长什么样:
>>> plan[:2]
[('第01话.mp4', '海贼王_S01E01.mp4'), ('第02话.mp4', '海贼王_S01E02.mp4')]
更优雅的选择:pathlib
Python 3.4+ 推荐用 pathlib,路径拼接不再需要 os.path.join:
from pathlib import Path
folder = Path(r'D:\Downloads\photos')
for index, file in enumerate(folder.glob('*.jpg'), start=1):
file.rename(folder / f'travel_{index:03d}.jpg')
几个注意点
- 永远先备份或先预览:批量操作一旦改名错了很难恢复;
- 新名字不要和已有文件冲突,否则会直接覆盖(Windows 下报错,Linux 下静默覆盖);
- 需要按修改时间、大小排序改名时,用
sorted(files, key=lambda f: os.path.getmtime(os.path.join(folder, f))); - 只处理指定扩展名时记得
os.path.splitext()取后缀再判断。
把这段脚本存成 rename.py,以后随时改两个参数就能用,是练手 os / pathlib 模块的好例子。
评论 0
还没有评论,来抢沙发吧~ 🛋