Administrator
发布于 2026-06-21 / 6 阅读
0
0

Python 自动化脚本:批量重命名本地文件完整实战项目

一、前言

本篇综合运用前面学过的变量、循环、文件操作、异常捕获、os 模块、函数封装所有知识点,制作一个实用工具脚本:批量重命名文件夹内所有文件。

日常场景:下载图片、文档杂乱命名,手动改名效率极低,用 Python 一键批量处理,支持自定义前缀、数字排序。

二、前置知识准备

核心用到内置os模块,无需额外 pip 安装,直接导入:

  1. os.listdir():读取文件夹内所有文件名称

  2. os.path.join():拼接文件夹路径 + 文件名,防止路径报错

  3. os.rename():执行文件重命名操作

  4. os.path.isfile():判断是否为文件(过滤文件夹,不修改子目录名)

三、基础版:统一前缀 + 有序数字重命名

功能:指定文件夹,全部文件重命名为 文件_01、文件_02、文件_03...

python

运行

import os

# 1. 配置参数,修改这里即可适配自己的文件夹
folder_path = r"C:\Users\XXX\Desktop\素材"  # 目标文件夹路径
prefix = "素材"  # 自定义文件前缀
start_num = 1    # 起始编号

try:
    # 遍历文件夹所有内容
    file_list = os.listdir(folder_path)
    count = start_num

    for name in file_list:
        # 拼接完整文件路径
        old_full_path = os.path.join(folder_path, name)
        # 只处理文件,跳过文件夹
        if os.path.isfile(old_full_path):
            # 拆分原文件名和后缀
            file_suffix = os.path.splitext(name)[1]
            # 拼接新文件名,两位数编号 01 02
            new_name = f"{prefix}_{count:02d}{file_suffix}"
            new_full_path = os.path.join(folder_path, new_name)
            
            # 执行重命名
            os.rename(old_full_path, new_full_path)
            print(f"已重命名:{name} → {new_name}")
            count += 1

    print(f"\n批量重命名完成!总共处理 {count - start_num} 个文件")

except FileNotFoundError:
    print("错误:文件夹路径不存在,请检查路径填写是否正确")
except Exception as err:
    print(f"程序运行出错:{err}")

使用说明

  1. 修改folder_path为你本地真实文件夹路径,Windows 路径前加r避免转义报错

  2. 修改prefix自定义文件开头文字

  3. count:02d代表编号占两位,不足补 0(01、02),改成03d就是三位编号(001、002)

四、进阶版:过滤指定后缀(只重命名图片 / 文档)

需求:只修改.jpg.png图片文件,txt、exe 等其他文件忽略

python

运行

import os

folder_path = r"C:\Users\XXX\Desktop\图片"
prefix = "风景图"
allow_suffix = [".jpg", ".png", ".jpeg"]  # 允许处理的文件后缀
count = 1

try:
    all_file = os.listdir(folder_path)
    for filename in all_file:
        full_old = os.path.join(folder_path, filename)
        if os.path.isfile(full_old):
            suffix = os.path.splitext(filename)[1].lower()
            # 判断后缀是否在允许列表
            if suffix in allow_suffix:
                new_filename = f"{prefix}_{count:03d}{suffix}"
                full_new = os.path.join(folder_path, new_filename)
                os.rename(full_old, full_new)
                print(f"{filename} → {new_filename}")
                count += 1
    print(f"\n图片重命名完毕,共处理 {count - 1} 张图片")
except Exception as e:
    print("异常:", e)

五、函数封装完整版(可重复调用)

把功能封装成函数,支持随时更换文件夹、前缀、过滤后缀,复用性更强

python

运行

import os

def batch_rename(folder, prefix, start=1, filter_suffix=None):
    """
    批量重命名文件函数
    :param folder: 目标文件夹路径
    :param prefix: 文件名称前缀
    :param start: 起始数字编号
    :param filter_suffix: 列表,指定只处理哪些后缀文件,None则全部处理
    :return: 返回成功处理的文件总数
    """
    if not os.path.exists(folder):
        raise FileNotFoundError("目标文件夹不存在")
    
    file_count = start
    file_list = os.listdir(folder)

    for name in file_list:
        old_path = os.path.join(folder, name)
        if not os.path.isfile(old_path):
            continue
        
        suffix = os.path.splitext(name)[1]
        # 后缀过滤逻辑
        if filter_suffix is not None and suffix not in filter_suffix:
            continue

        new_name = f"{prefix}_{file_count:02d}{suffix}"
        new_path = os.path.join(folder, new_name)
        os.rename(old_path, new_path)
        print(f"{name} → {new_name}")
        file_count += 1
    return file_count - start

# ========== 调用函数 ==========
if __name__ == "__main__":
    try:
        total = batch_rename(
            folder=r"C:\Users\XXX\Desktop\文档",
            prefix="学习笔记",
            start=1,
            filter_suffix=[".txt", ".md"]
        )
        print(f"\n执行完成,共修改 {total} 个文件")
    except Exception as error:
        print("运行失败:", error)

六、运行前重要注意事项

  1. 备份文件:运行脚本前复制一份文件备份,防止命名出错无法恢复

  2. 路径规范:Windows 路径使用原始字符串 r"路径",避免\转义导致报错

  3. 权限问题:文件夹放在桌面 / 文档,不要直接操作 C 盘根目录,会权限不足

  4. 中文支持:Python3 默认支持中文文件名,无需额外修改编码

  5. 重复名称:脚本按顺序递增编号,不会出现同名覆盖文件的问题

七、常见报错解决

  1. FileNotFoundError:文件夹路径复制错误,检查文件夹是否存在

  2. PermissionError:程序没有修改文件权限,右键 CMD 选择「以管理员身份运行」

  3. 文件被占用:图片 / 文档正在其他软件打开,关闭后再执行脚本

  4. 后缀过滤不生效:后缀大小写问题,代码中用.lower()统一小写匹配

八、下期预告

下一篇:Python Tkinter 简易 GUI 窗口程序开发教程,给脚本制作可视化图形界面,不用命令行操作。


评论