在日常文件管理中,我们经常需要对多个文件夹进行批量重命名,比如统一添加前缀/后缀、替换特定字符、按序号排序等。Python凭借其强大的文件操作能力和简洁的语法,是完成这类任务的绝佳工具。本文将详细介绍使用Python批量重命名文件夹的方法步骤、核心代码实现、常见问题及注意事项,帮助你高效完成文件管理任务。
![图片[1]_Python批量重命名文件夹的方法步骤_知途无界](https://zhituwujie.com/wp-content/uploads/2025/10/d2b5ca33bd20251015093035.png)
一、核心思路与常用场景
1. 核心原理
Python通过内置模块 os 和 pathlib(Python 3.4+推荐)实现对文件系统的操作:
- 遍历目标目录:获取所有需要重命名的文件夹列表。
- 生成新名称:根据需求(如添加前缀、替换字符、序号递增)为每个文件夹生成新名称。
- 执行重命名:通过
os.rename()或Path.rename()方法修改文件夹名称。
2. 典型应用场景
- 统一格式:为文件夹添加日期前缀(如
202406_项目资料)、后缀(如报告_V2)或编号(如01_文档、02_图片)。 - 字符替换:批量删除文件夹名中的空格(替换为下划线)、特殊符号(如
#→No)或错误拼写。 - 结构化命名:按规则重新排序(如
第1章→Chapter_1)、分类标记(如照片_2023→Photos_2023)。
二、基础方法:使用 os 模块(兼容所有Python版本)
1. 步骤详解
(1)导入必要模块
import os
(2)指定目标目录
target_dir = r"C:\Users\YourName\Documents\需要重命名的文件夹" # Windows路径(原始字符串)
# 或 target_dir = "/Users/YourName/Documents/需要重命名的文件夹" # Mac/Linux路径
(3)遍历目录中的文件夹
使用 os.listdir() 获取目录内所有文件和文件夹,通过 os.path.isdir() 筛选出文件夹(排除文件):
folders = [f for f in os.listdir(target_dir) if os.path.isdir(os.path.join(target_dir, f))]
(4)生成新名称并重命名
遍历文件夹列表,为每个文件夹生成新名称(此处以添加前缀 “New_” 为例),然后通过 os.rename() 执行重命名:
for folder in folders:
old_path = os.path.join(target_dir, folder) # 原始路径(如 C:\目标目录\旧名称)
new_name = f"New_{folder}" # 新名称(如 New_旧名称)
new_path = os.path.join(target_dir, new_name) # 新路径(如 C:\目标目录\New_旧名称)
try:
os.rename(old_path, new_path)
print(f"重命名成功:{folder} → {new_name}")
except Exception as e:
print(f"重命名失败:{folder} → {new_name},错误:{e}")
三、进阶方法:使用 pathlib 模块(Python 3.4+推荐)
pathlib 提供了更面向对象、易读性更强的路径操作方式,适合复杂场景。
1. 步骤详解
(1)导入模块并指定目录
from pathlib import Path
target_dir = Path(r"C:\Users\YourName\Documents\需要重命名的文件夹") # 直接使用Path对象
(2)筛选文件夹
folders = [f for f in target_dir.iterdir() if f.is_dir()] # iterdir()遍历子项,is_dir()筛选文件夹
(3)生成新名称并重命名
以替换文件夹名中的空格为下划线为例:
for folder in folders:
old_name = folder.name # 原始文件夹名(如 "项目 资料")
new_name = old_name.replace(" ", "_") # 新名称(如 "项目_资料")
if new_name != old_name: # 避免重复操作
try:
folder.rename(folder.with_name(new_name)) # 使用with_name生成新路径
print(f"重命名成功:{old_name} → {new_name}")
except Exception as e:
print(f"重命名失败:{old_name} → {new_name},错误:{e}")
四、常见应用案例代码
案例1:为文件夹添加序号前缀(如 01_、02_)
import os
target_dir = r"C:\目标目录"
folders = [f for f in os.listdir(target_dir) if os.path.isdir(os.path.join(target_dir, f))]
for index, folder in enumerate(sorted(folders), start=1): # 按字母排序后编号
old_path = os.path.join(target_dir, folder)
new_name = f"{index:02d}_{folder}" # 02d表示两位数,不足补零(如 01_、02_)
new_path = os.path.join(target_dir, new_name)
try:
os.rename(old_path, new_path)
print(f"编号成功:{folder} → {new_name}")
except Exception as e:
print(f"编号失败:{folder},错误:{e}")
案例2:替换文件夹名中的特定字符(如 “#”→”No”)
from pathlib import Path
target_dir = Path(r"C:\目标目录")
folders = [f for f in target_dir.iterdir() if f.is_dir()]
for folder in folders:
old_name = folder.name
new_name = old_name.replace("#", "No").replace("@", "At") # 多字符替换
if new_name != old_name:
try:
folder.rename(folder.with_name(new_name))
print(f"字符替换成功:{old_name} → {new_name}")
except Exception as e:
print(f"字符替换失败:{old_name},错误:{e}")
案例3:按日期前缀批量重命名(如 202406_项目)
import os
from datetime import datetime
target_dir = r"C:\目标目录"
folders = [f for f in os.listdir(target_dir) if os.path.isdir(os.path.join(target_dir, f))]
today = datetime.now().strftime("%Y%m%d") # 当前日期(如 20240615)
for folder in folders:
old_path = os.path.join(target_dir, folder)
new_name = f"{today}_{folder}"
new_path = os.path.join(target_dir, new_name)
try:
os.rename(old_path, new_path)
print(f"日期前缀添加成功:{folder} → {new_name}")
except Exception as e:
print(f"日期前缀添加失败:{folder},错误:{e}")
五、注意事项与风险规避
1. 操作前必做:备份数据
批量重命名是不可逆操作!建议先复制目标文件夹到备份目录(如 C:\备份\原文件夹),或使用版本控制工具(如Git)记录原始状态。
2. 避免名称冲突
- 问题:若新名称与目录内已有文件夹/文件重复,会触发
FileExistsError。 - 解决:在生成新名称时检查是否存在(示例代码):
new_path = os.path.join(target_dir, new_name) if not os.path.exists(new_path): # 检查是否已存在 os.rename(old_path, new_path) else: print(f"跳过:{new_name} 已存在,避免覆盖")
3. 处理特殊字符与路径格式
- Windows路径:建议使用原始字符串(如
r"C:\路径")或双反斜杠("C:\\路径"),避免转义符错误。 - 中文/空格:
os和pathlib均支持Unicode,但需确保终端/IDE的编码为UTF-8(避免打印中文乱码)。
4. 权限问题
- 若目标文件夹被其他程序占用(如资源管理器打开),或当前用户无修改权限,会报
PermissionError。 - 解决:关闭占用程序,或以管理员身份运行Python脚本(右键→“以管理员身份运行”)。
5. 调试技巧
- 先打印新旧名称(不执行
rename),确认逻辑正确后再实际操作:for folder in folders: old_name = folder.name new_name = old_name.replace("旧词", "新词") print(f"[测试] 将重命名:{old_name} → {new_name}") # 仅打印,不执行 # 确认无误后,再取消注释 os.rename() 行
六、总结
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
**os 模块** | 简单重命名、兼容旧版Python | 无需额外依赖,代码直观 | 路径拼接需手动(易出错) |
**pathlib 模块** | 复杂路径操作、Python 3.4+ | 面向对象,路径处理更安全易读 | 需Python 3.4及以上版本 |
推荐选择:优先使用 pathlib(代码更简洁安全),若需兼容Python 2.7或旧项目,则用 os 模块。
通过本文的方法,你可以轻松实现文件夹的批量重命名,无论是标准化命名格式、清理冗余字符,还是按规则重构目录结构,都能高效完成。记得操作前备份数据,确保脚本逻辑正确后再执行实际重命名!
© 版权声明
文中内容均来源于公开资料,受限于信息的时效性和复杂性,可能存在误差或遗漏。我们已尽力确保内容的准确性,但对于因信息变更或错误导致的任何后果,本站不承担任何责任。如需引用本文内容,请注明出处并尊重原作者的版权。
THE END

























暂无评论内容