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编辑器,尝试为你的文件库设计一套智能命名系统吧!
💡 推荐阅读
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文件得到最佳保护。