在文件管理场景中,批量重命名是高频需求,比如整理拍摄的照片、规范项目文档命名、处理下载的批量素材等,手动操作不仅效率低还容易出错,使用Python可以快速实现自动化处理,适配多种重命名规则。
Python批量重命名的核心依赖
Python实现批量重命名主要依赖内置的os模块,该模块提供了操作文件系统的相关方法,其中os.listdir()可以获取指定目录下的所有文件名称,os.rename()可以执行单个文件的重命名操作,二者结合就能完成批量处理。
基础方法说明
os.listdir(path):传入目标文件夹路径,返回该路径下所有文件和文件夹的名称列表,默认不包含路径前缀os.rename(src, dst):传入原文件路径src和新文件路径dst,执行重命名操作,若新路径和原路径在同一目录,仅修改文件名即可os.path.join(path, name):拼接文件夹路径和文件名,避免不同系统路径分隔符不兼容的问题
常见批量重命名场景实现
场景1:按序号批量重命名文件
比如将某个文件夹下的所有图片统一命名为image_001.jpg、image_002.png这类格式,代码如下:
import os
# 目标文件夹路径
folder_path = "./test_files"
# 获取文件夹下所有文件名
file_names = os.listdir(folder_path)
# 过滤掉文件夹,只处理文件
files = [f for f in file_names if os.path.isfile(os.path.join(folder_path, f))]
# 按文件名排序,保证重命名顺序固定
files.sort()
# 序号起始值
index = 1
for file in files:
# 获取文件后缀
file_ext = os.path.splitext(file)[1]
# 拼接新文件名,序号补零到3位
new_name = f"image_{index:03d}{file_ext}"
# 拼接原文件完整路径和新文件完整路径
old_path = os.path.join(folder_path, file)
new_path = os.path.join(folder_path, new_name)
# 执行重命名
os.rename(old_path, new_path)
print(f"已将 {file} 重命名为 {new_name}")
index += 1
场景2:替换文件名中的特定字符
如果文件名中包含需要替换的旧字符,比如将文件名里的old_全部替换成new_,代码如下:
import os
folder_path = "./test_files"
old_str = "old_"
new_str = "new_"
for file in os.listdir(folder_path):
file_path = os.path.join(folder_path, file)
# 只处理文件,跳过文件夹
if os.path.isfile(file_path):
# 判断文件名是否包含需要替换的字符
if old_str in file:
# 生成新文件名
new_file = file.replace(old_str, new_str)
new_path = os.path.join(folder_path, new_file)
os.rename(file_path, new_path)
print(f"已将 {file} 重命名为 {new_file}")
场景3:给所有文件添加统一前缀或后缀
比如给所有文档类文件添加2024_前缀,或者给图片添加_backup后缀,代码如下:
import os
folder_path = "./test_files"
# 要添加的前缀
prefix = "2024_"
# 要添加的后缀,注意不要包含后缀名前的点
suffix = "_backup"
for file in os.listdir(folder_path):
file_path = os.path.join(folder_path, file)
if os.path.isfile(file_path):
# 分离文件名和后缀
file_name, file_ext = os.path.splitext(file)
# 添加前缀和后缀,再拼接原后缀
new_file = f"{prefix}{file_name}{suffix}{file_ext}"
new_path = os.path.join(folder_path, new_file)
os.rename(file_path, new_path)
print(f"已将 {file} 重命名为 {new_file}")
注意事项
- 执行重命名操作前,建议先备份原文件,避免误操作导致文件丢失
- 如果目标文件夹下存在同名文件,
os.rename()会直接覆盖原有文件,执行前可以先判断新文件名是否已存在 - 处理文件名时如果需要兼容中文,保证Python文件编码为UTF-8即可,无需额外处理
- 如果要处理子文件夹下的文件,可以结合
os.walk()方法递归遍历所有层级的文件
递归处理子文件夹的扩展方法
如果需要处理目标文件夹下所有子目录中的文件,可以使用os.walk()遍历,代码如下:
import os
root_path = "./test_root"
for parent, dirs, files in os.walk(root_path):
for file in files:
file_path = os.path.join(parent, file)
# 这里可以添加任意重命名逻辑,比如替换字符
if "temp" in file:
new_file = file.replace("temp", "final")
new_path = os.path.join(parent, new_file)
os.rename(file_path, new_path)
print(f"已将 {file_path} 重命名为 {new_path}")