Python 文件自动化处理:批量重命名技巧

还在为大量文件重命名烦恼?本文教你用Python轻松实现批量重命名,支持正则表达式、自定义规则,让文件管理更高效。

468 × 60 文章顶部广告 QEG44JER

引言 / 什么是文件批量重命名

在日常工作中,我们经常需要处理大量文件:整理照片时按日期重命名、统一项目文档的命名格式、清理下载文件夹中的乱码文件名……手动逐个修改不仅耗时,还容易出错。Python凭借其强大的文件操作能力和丰富的标准库,可以轻松实现自动化批量重命名,让文件管理效率提升10倍以上。

本文将系统介绍Python实现文件批量重命名的核心方法,涵盖基础字符串操作、正则表达式匹配、自定义命名规则设计等实用技巧,并提供完整代码示例和效果对比。

准备工作

  • Python环境:建议使用Python 3.6+版本
  • 标准库依赖os(文件操作)、re(正则表达式)、shutil(高级文件操作)
  • 测试文件:准备一个包含20-30个不同命名格式文件的测试文件夹

基础操作:使用os模块实现简单重命名

步骤一:遍历目标文件夹

import os

# 指定目标文件夹路径
folder_path = './test_files'

# 获取文件夹内所有文件(不包含子文件夹)
files = [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))]
print(f"找到 {len(files)} 个文件:{files[:5]}...")

步骤二:基础字符串替换重命名

# 示例:将所有文件名中的"old"替换为"new"
for filename in files:
    if 'old' in filename:
        new_name = filename.replace('old', 'new')
        src = os.path.join(folder_path, filename)
        dst = os.path.join(folder_path, new_name)
        os.rename(src, dst)
        print(f"重命名: {filename} → {new_name}")

提示:操作前建议先备份文件,或使用os.path.exists()检查目标文件名是否已存在

进阶技巧:正则表达式精准匹配

步骤一:导入re模块

import re

步骤二:使用正则表达式提取/替换

# 示例1:提取日期部分并格式化(原文件名:vacation_20230515.jpg)
pattern = r'_(\d{8})'  # 匹配下划线后的8位数字
for filename in files:
    match = re.search(pattern, filename)
    if match:
        date_str = match.group(1)
        formatted_date = f"{date_str[:4]}-{date_str[4:6]}-{date_str[6:8]}"
        new_name = re.sub(pattern, f'_{formatted_date}', filename)
        # 实际重命名操作...

步骤三:常见正则表达式场景

需求场景 正则表达式示例 说明
移除所有特殊字符 [^a-zA-Z0-9._-] 保留字母、数字和常见符号
统一前缀 ^.*?( 匹配第一个左括号前内容
提取序列号 _(\d+)\. 匹配下划线后的数字

高级应用:自定义命名规则设计

方案一:按日期重命名照片

from datetime import datetime

def rename_by_date(folder):
    for filename in os.listdir(folder):
        if filename.lower().endswith(('.jpg', '.png', '.jpeg')):
            try:
                # 尝试从EXIF获取拍摄日期(需安装Pillow库)
                from PIL import Image
                from PIL.ExifTags import TAGS
                
                img_path = os.path.join(folder, filename)
                img = Image.open(img_path)
                exif = {TAGS[k]: v for k, v in img._getexif().items() if k in TAGS}
                date_str = exif.get('DateTimeOriginal', datetime.now().strftime('%Y%m%d'))
                
                # 格式化为YYYY-MM-DD_序号.扩展名
                base, ext = os.path.splitext(filename)
                new_name = f"{date_str[:10]}_{base[-3:]}{ext}"
                os.rename(img_path, os.path.join(folder, new_name))
            except Exception as e:
                print(f"处理 {filename} 出错: {e}")

方案二:批量添加前缀/后缀

def add_prefix_suffix(folder, prefix='', suffix='_v1'):
    for filename in os.listdir(folder):
        name, ext = os.path.splitext(filename)
        new_name = f"{prefix}{name}{suffix}{ext}"
        os.rename(
            os.path.join(folder, filename),
            os.path.join(folder, new_name)
        )

完整案例演示:照片整理自动化

场景需求

将"2023年三亚旅行"文件夹中的照片:

  1. 按拍摄日期重命名(格式:YYYY-MM-DD_序号.jpg)
  2. 统一添加"Sanya_"前缀
  3. 处理子文件夹中的文件

实现代码

import os
import re
from datetime import datetime

def batch_rename_photos(root_folder):
    for foldername, subfolders, filenames in os.walk(root_folder):
        for i, filename in enumerate(filenames, 1):
            if filename.lower().endswith(('.jpg', '.png', '.jpeg')):
                try:
                    # 模拟获取日期(实际项目应使用EXIF读取)
                    # 这里用文件夹名中的日期作为示例
                    date_match = re.search(r'\d{4}年\d{1,2}月\d{1,2}日', foldername)
                    if date_match:
                        date_part = date_match.group(0).replace('年', '-').replace('月', '-').replace('日', '')
                    else:
                        date_part = datetime.now().strftime('%Y-%m-%d')
                    
                    # 构建新文件名
                    name, ext = os.path.splitext(filename)
                    new_name = f"Sanya_{date_part}_{i:03d}{ext}"
                    
                    # 执行重命名
                    src = os.path.join(foldername, filename)
                    dst = os.path.join(foldername, new_name)
                    os.rename(src, dst)
                    print(f"成功: {filename} → {new_name}")
                except Exception as e:
                    print(f"失败 {filename}: {e}")

# 使用示例
batch_rename_photos('./2023年三亚旅行')

常见问题

Q:重命名时出现"FileExistsError"怎么办?

A:在重命名前添加存在性检查:

dst = os.path.join(folder_path, new_name)
if os.path.exists(dst):
    print(f"警告:{new_name} 已存在,跳过")
    continue

Q:如何处理中文文件名乱码?

A:确保文件系统编码为UTF-8,或在打开文件时指定编码:

# 在Windows系统可能需要
import locale
locale.setlocale(locale.LC_ALL, 'chinese')

Q:如何撤销批量重命名操作?

A:建议操作前:

  1. 使用版本控制(如Git)
  2. 创建文件列表备份:
with open('rename_log.txt', 'w') as f:
    for old, new in rename_pairs:  # 假设已记录重命名对
        f.write(f"{old}\t{new}\n")

小结

通过本文介绍的Python文件重命名技术,你可以:

  1. 使用os.rename()实现基础重命名
  2. 结合re模块进行复杂模式匹配
  3. 设计自定义命名规则应对不同场景
  4. 处理子文件夹和特殊文件类型

实际项目中,建议先在测试文件夹验证脚本,再应用到重要文件。掌握这些技巧后,文件管理效率将得到质的提升。现在就打开你的Python编辑器,尝试为你的文件库设计一套智能命名系统吧!

468 × 60 文章底部广告 7XM2LNHL

💡 推荐阅读

剪映模板素材哪里找?优质资源推荐

想要找到优质的剪映模板素材?本文为你推荐几个可靠的资源网站,让你轻松获取丰富多样的模板素材,提升视频制作水平。

Android通知历史记录:轻松回顾错过的消息

错过重要消息?Android通知历史记录来帮你!本文教你如何查看和管理通知历史记录,不再错过任何重要信息。

批量打印入门:如何快速设置打印任务?

批量打印能大幅提升效率,但设置起来却让不少人头疼。本文将带你从零开始,学习如何快速设置打印任务,掌握基础技巧,让打印变得轻松又高效。

WPS演示图表制作技巧:数据可视化轻松搞定

数据太多难以呈现?本文将教你如何使用WPS演示制作图表,将复杂数据转化为直观图表,让观众一眼看懂数据背后的故事,提升演示说服力。

如何通过外链(Backlinks)提升网站权重?

外链是SEO中重要的排名因素之一,高质量的外链能显著提升网站权重。本文将教你如何获取高质量外链,避免低质量外链的坑,让你的网站排名更上一层楼。

OBS 录屏软件安装全攻略:零基础快速上手

还在为 OBS 安装问题发愁?本文将详细介绍 OBS 录屏软件在 Windows、Mac 系统上的安装步骤,以及安装过程中的常见问题及解决方法,让你轻松开启录屏之旅。

Excel打印高级技巧:如何打印网格线和批注?

打印Excel表格时,如何打印网格线和批注?本文教你使用Excel的高级打印设置,轻松实现网格线和批注的打印。

AE预设应用指南:快速打造专业级视频

想要快速打造专业级视频?AE预设应用来帮你!本文将详细介绍AE预设的使用方法,让你轻松应用各种预设效果,提升视频质量。

手机夜景拍摄全攻略:轻松拍出璀璨夜色

夜景拍摄是手机摄影的难点,但掌握技巧后也能拍出惊艳作品。本文将分享手机夜景拍摄的参数设置、构图技巧及实用小工具,助你轻松捕捉城市夜晚的璀璨与静谧。

iOS系统设置:如何快速关闭后台应用刷新?

后台应用刷新会悄悄消耗电量和流量,其实iOS系统设置里就能轻松关闭。本文将教你一步步操作,还能了解关闭后的影响,让你的iPhone更省电!

PowerPoint动画优化:如何提升动画的流畅度和自然度?

动画效果不够流畅?不够自然?本文教你如何优化动画设置,让动画更加逼真和吸引人。

如何用AI工具快速生成短视频封面和标题?

AI工具能大幅提升短视频封面和标题的设计效率。本文介绍几款实用AI工具,助你快速生成高质量封面和标题。

Excel错误值处理的7个实用技巧

系统讲解Excel错误值的处理方案,涵盖#N/A、#DIV/0!、#VALUE!等常见错误的解决方法,提升公式稳定性。

Android系统设置进阶:提升手机性能的秘诀

想要让Android手机运行更流畅?掌握这些系统设置进阶技巧,轻松提升手机性能,告别卡顿。

OBS场景与来源优化:提升录屏直播质量

录屏直播质量不佳?可能是场景与来源设置有问题。本文将教你如何优化OBS的场景与来源设置,包括分辨率、帧率、音频质量等,让你的录屏直播更加清晰、流畅。

Photoshop入门教程:PS基础操作完全指南

本教程介绍Adobe Photoshop的核心概念和基础操作,包括界面认识、图层管理、选区工具、常用调色功能,帮助零基础用户快速入门PS。

隐私浏览模式真的完全安全吗?

隐私浏览模式看似安全,但真的完全无懈可击吗?本文将探讨隐私浏览模式的局限性,如无法阻止ISP追踪、无法保护公共WiFi安全等,帮助你更全面地了解隐私浏览。

数码配件保养与维护:延长使用寿命的小技巧

数码配件也需要保养!本文分享一些实用的保养与维护小技巧,帮助你延长数码配件的使用寿命,节省更换成本!

WPS Office完全使用指南

WPS Office是国内使用最广泛的免费办公软件。本教程介绍WPS的安装、三大组件(文字/表格/演示)的基础使用,以及与Microsoft Office的兼容性处理。

Docker 镜像构建:从 Dockerfile 到自定义镜像

想要构建自己的 Docker 镜像吗?本文将详细讲解 Dockerfile 的编写技巧,带你从零开始构建自定义镜像,满足个性化开发需求。