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

💡 推荐阅读

Word长文档如何快速生成目录?超详细教程

还在为Word长文档的目录生成而烦恼吗?本文将详细介绍如何利用Word内置功能,快速生成美观且可自动更新的目录,让你的文档结构一目了然。

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

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

Word段落格式设置:让文档结构更清晰

段落格式设置是Word排版的关键。本文将教你如何通过段落缩进、行距、对齐方式等设置,让文档结构更加清晰,提升阅读体验。

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

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

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

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

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

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

AE关键帧速度控制:打造个性化动画节奏

想要让AE动画节奏更加个性化?关键帧速度控制是关键!本文将教你如何调整关键帧速度,打造独具特色的动画效果。

安卓手机实用技巧:让手机更好用的50个小技巧

整理50个最实用的安卓手机使用技巧,包括系统设置优化、截图录屏、通知管理、省电技巧和隐藏功能,让你的手机更好用更省电。

Figma入门教程:UI设计从零开始

Figma是目前最流行的UI/UX设计工具。本教程介绍Figma的基础操作、画板、组件、Auto Layout等核心功能,帮助设计初学者快速上手。

数据库备份与恢复自动化:提升效率的利器

手动进行数据库备份与恢复既耗时又易出错。本文将介绍如何通过自动化工具实现数据库备份与恢复的自动化,提升效率,减少人为错误。

VBA错误处理与调试:让Excel程序更稳定

在VBA编程中,错误处理与调试是必不可少的环节。本文将介绍常见的错误类型、错误处理机制以及调试技巧,让你的Excel程序更加稳定可靠。

PPT制作入门:从零开始做出好看的演示文稿

本教程讲解PPT制作的基础知识,包括幻灯片布局、文本排版、图片使用、动画设置和演示技巧,帮助你快速制作出专业的演示文稿。

WPS Office完全使用指南

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

SQL 分组与排序:让数据更有条理

数据杂乱无章?SQL 分组与排序功能来拯救!本文讲解 GROUP BY 分组和 ORDER BY 排序语句,助你快速整理数据,发现数据潜在规律。

iOS系统设置:如何自定义通知显示方式?

通知太多太烦人?iOS系统设置里可以自定义通知显示方式哦!本文教你如何根据需求调整,让通知更贴心,不再打扰你的工作和生活。

iOS系统设置:如何管理存储空间和优化性能?

iPhone用久了存储空间不够用?性能下降?iOS系统设置里有妙招!本文教你如何管理存储空间,优化性能,让你的iPhone焕然一新!

远程桌面故障排查与修复指南

遇到远程桌面连接问题?别担心,本文将提供故障排查与修复指南,包括常见错误代码解析、网络诊断工具使用及解决方案等。

VS Code插件推荐:提升开发效率的必备神器

VS Code的强大之处在于其丰富的插件生态。本文精选了几款提升开发效率的必备插件,助你事半功倍。

PDF转PPT:如何保留原始排版与动画效果

将PDF演示文稿转为PPT编辑?本文教你保留字体、图片和动画效果,推荐3款支持格式转换的工具,附转换后优化技巧。

PDF加密安全:如何选择可靠的加密工具

担心PDF加密工具不安全?本文教你如何挑选可靠的加密软件,包括评估软件的安全性、功能完整性、用户评价等,确保你的PDF文件得到最佳保护。