Python批量重命名文件夹的方法步骤

在日常文件管理中,我们经常需要对多个文件夹进行批量重命名,比如统一添加前缀/后缀、替换特定字符、按序号排序等。Python凭借其强大的文件操作能力和简洁的语法,是完成这类任务的绝佳工具。本文将详细介绍使用Python批量重命名文件夹的方法步骤、核心代码实现、常见问题及注意事项,帮助你高效完成文件管理任务。

图片[1]_Python批量重命名文件夹的方法步骤_知途无界

一、核心思路与常用场景

1. ​核心原理

Python通过内置模块 ospathlib(Python 3.4+推荐)实现对文件系统的操作:

  • 遍历目标目录​:获取所有需要重命名的文件夹列表。
  • 生成新名称​:根据需求(如添加前缀、替换字符、序号递增)为每个文件夹生成新名称。
  • 执行重命名​:通过 os.rename()Path.rename() 方法修改文件夹名称。

2. ​典型应用场景

  • 统一格式​:为文件夹添加日期前缀(如 202406_项目资料)、后缀(如 报告_V2)或编号(如 01_文档02_图片)。
  • 字符替换​:批量删除文件夹名中的空格(替换为下划线)、特殊符号(如 #No)或错误拼写。
  • 结构化命名​:按规则重新排序(如 第1章Chapter_1)、分类标记(如 照片_2023Photos_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:\\路径"),避免转义符错误。
  • 中文/空格​:ospathlib 均支持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
喜欢就点个赞,支持一下吧!
点赞47 分享
评论 抢沙发
头像
欢迎您留下评论!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容