在Python中实现批量重命名文件,核心是通过内置的文件操作模块获取目标文件列表,再按照预设规则修改每个文件的名称。常用的模块包括os模块和shutil模块,二者可以满足绝大多数重命名场景的需求。

基础方法:使用os模块重命名
os模块是Python标准库中用于操作系统交互的核心模块,其中的os.rename()函数可以直接修改单个文件的名称,结合os.listdir()获取目录下的所有文件,就能实现批量操作。
简单批量重命名示例
以下代码实现将指定目录下所有txt文件的后缀修改为md:
import os
# 目标文件目录
target_dir = "./test_files"
# 遍历目录下的所有文件
for filename in os.listdir(target_dir):
# 拼接完整文件路径
old_path = os.path.join(target_dir, filename)
# 判断是否为文件且后缀为txt
if os.path.isfile(old_path) and filename.endswith(".txt"):
# 生成新文件名,替换后缀
new_filename = filename.replace(".txt", ".md")
new_path = os.path.join(target_dir, new_filename)
# 执行重命名
os.rename(old_path, new_path)
print(f"已将 {filename} 重命名为 {new_filename}")
添加统一前缀示例
如果需要给所有文件添加统一的前缀,可以调整文件名生成逻辑:
import os
target_dir = "./test_files"
prefix = "new_"
for filename in os.listdir(target_dir):
old_path = os.path.join(target_dir, filename)
if os.path.isfile(old_path):
# 拼接新文件名,添加前缀
new_filename = prefix + filename
new_path = os.path.join(target_dir, new_filename)
os.rename(old_path, new_path)
print(f"已将 {filename} 重命名为 {new_filename}")
使用shutil模块处理跨目录重命名
如果需要将文件重命名后移动到其他目录,使用shutil.move()函数会更方便,该函数既可以修改文件名,也可以同时移动文件位置。
import os
import shutil
source_dir = "./old_files"
target_dir = "./new_files"
# 确保目标目录存在
os.makedirs(target_dir, exist_ok=True)
for filename in os.listdir(source_dir):
old_path = os.path.join(source_dir, filename)
if os.path.isfile(old_path):
# 生成新文件名,添加日期前缀
new_filename = "202405_" + filename
new_path = os.path.join(target_dir, new_filename)
# 移动并重命名文件
shutil.move(old_path, new_path)
print(f"已将 {filename} 移动到 {target_dir} 并重命名为 {new_filename}")
按序号批量重命名
很多场景下需要按照序号对文件进行重命名,比如将杂乱的图片文件命名为img_001.jpg、img_002.jpg这样的格式,实现逻辑如下:
import os
target_dir = "./images"
# 获取目录下所有图片文件,按名称排序
image_files = [f for f in os.listdir(target_dir) if f.endswith((".jpg", ".png", ".jpeg"))]
image_files.sort()
# 遍历文件,按序号重命名
for index, filename in enumerate(image_files, start=1):
old_path = os.path.join(target_dir, filename)
# 生成3位序号,不足补0
new_filename = f"img_{index:03d}{os.path.splitext(filename)[1]}"
new_path = os.path.join(target_dir, new_filename)
os.rename(old_path, new_path)
print(f"已将 {filename} 重命名为 {new_filename}")
操作注意事项
- 重命名前建议先备份原文件,避免误操作导致文件丢失
- 使用
os.path.exists()判断新文件名是否已存在,防止覆盖已有文件 - 如果文件名包含中文,需要确保Python脚本的编码格式为UTF-8,避免乱码问题
- 遍历文件时如果需要处理子目录下的文件,可以使用
os.walk()函数递归获取所有文件路径
递归处理子目录文件示例
以下代码实现递归遍历目标目录及其所有子目录,将所有的log文件后缀修改为txt:
import os
root_dir = "./project_logs"
for root, dirs, files in os.walk(root_dir):
for filename in files:
if filename.endswith(".log"):
old_path = os.path.join(root, filename)
new_filename = filename.replace(".log", ".txt")
new_path = os.path.join(root, new_filename)
os.rename(old_path, new_path)
print(f"已将 {old_path} 重命名为 {new_path}")