Python 文件自动化处理:批量重命名技巧
还在为大量文件重命名烦恼?本文教你用Python轻松实现批量重命名,支持正则表达式、自定义规则,让文件管理更高效。
引言 / 什么是文件批量重命名
在日常工作中,我们经常需要处理大量文件:整理照片时按日期重命名、统一项目文档的命名格式、清理下载文件夹中的乱码文件名……手动逐个修改不仅耗时,还容易出错。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年三亚旅行"文件夹中的照片:
- 按拍摄日期重命名(格式:YYYY-MM-DD_序号.jpg)
- 统一添加"Sanya_"前缀
- 处理子文件夹中的文件
实现代码
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:建议操作前:
- 使用版本控制(如Git)
- 创建文件列表备份:
with open('rename_log.txt', 'w') as f:
for old, new in rename_pairs: # 假设已记录重命名对
f.write(f"{old}\t{new}\n")
小结
通过本文介绍的Python文件重命名技术,你可以:
- 使用
os.rename()实现基础重命名 - 结合
re模块进行复杂模式匹配 - 设计自定义命名规则应对不同场景
- 处理子文件夹和特殊文件类型
实际项目中,建议先在测试文件夹验证脚本,再应用到重要文件。掌握这些技巧后,文件管理效率将得到质的提升。现在就打开你的Python编辑器,尝试为你的文件库设计一套智能命名系统吧!
💡 推荐阅读
剪映模板素材哪里找?优质资源推荐
想要找到优质的剪映模板素材?本文为你推荐几个可靠的资源网站,让你轻松获取丰富多样的模板素材,提升视频制作水平。
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 的编写技巧,带你从零开始构建自定义镜像,满足个性化开发需求。