Python小工具实战:文件批量重命名工具(正则匹配模式)
Python小工具实战:文件批量重命名工具(正则匹配模式)
Python小工具实战:文件批量重命名工具(正则匹配模式),本文介绍了用Python开发文件批量重命名工具(正则匹配模式)的教程。该工具支持选目标文件夹,用正则表达式匹配文件名,按自定义规则重命名,还能预览效果、记录日志。文中详述开发环境、实现思路,分步给出代码实现,包括导入库、创主窗口、实现文件夹选择等功能,并有使用示例和扩展方向,助读者掌握开发方法,可按需修改扩展以适配实际场景。
前言
Python作为一门简洁、易读、功能强大的编程语言,其基础语法是入门学习的核心。掌握好基础语法,能为后续的编程实践打下坚实的基础。本文将全面讲解Python3的基础语法知识,适合编程初学者系统学习。Python以其简洁优雅的语法和强大的通用性,成为当今最受欢迎的编程语言。本专栏旨在系统性地带你从零基础入门到精通Python核心。无论你是零基础小白还是希望进阶的专业开发者,都将通过清晰的讲解、丰富的实例和实战项目,逐步掌握语法基础、核心数据结构、函数与模块、面向对象编程、文件处理、主流库应用(如数据分析、Web开发、自动化)以及面向对象高级特性,最终具备独立开发能力和解决复杂问题的思维,高效应对数据分析、人工智能、Web应用、自动化脚本等广泛领域的实际需求。
🥇 点击进入Python入门专栏,Python凭借简洁易读的语法,是零基础学习编程的理想选择。本专栏专为初学者设计,系统讲解Python核心基础:变量、数据类型、流程控制、函数、文件操作及常用库入门。通过清晰示例与实用小项目,助你快速掌握编程思维,打下坚实根基,迈出自动化办公、数据分析或Web开发的第一步。
🥇 点击进入Python小游戏实战专栏, 寓教于乐,用Python亲手打造经典小游戏!本专栏通过开发贪吃蛇、飞机大战、猜数字、简易版俄罗斯方块等趣味项目,在实践中掌握Python核心语法、面向对象编程、事件处理、图形界面(如Pygame)等关键技能,将枯燥的代码学习转化为可见的成果,让学习编程充满乐趣与成就感,快速提升实战能力。
🥇 点击进入Python小工具实战专栏,告别重复劳动,用Python打造效率神器!本专栏教你开发文件批量处理、自动邮件通知、简易爬虫、桌面提醒、密码生成器、天气查询等实用小工具。聚焦os、shutil、requests、smtplib、schedule等核心库,通过真实场景案例,快速掌握自动化脚本编写技巧,解放双手,显著提升工作与生活效率,让代码真正服务于你的日常。
🥇 点击进入Python爬虫实战专栏,解锁网络数据宝库!本专栏手把手教你使用Python核心库(如requests、BeautifulSoup、Scrapy)构建高效爬虫。从基础网页解析到动态页面抓取、数据存储(CSV/数据库)、反爬策略应对及IP代理使用,通过实战项目(如电商比价、新闻聚合、图片采集、舆情监控),掌握合法合规获取并利用网络数据的核心技能,让数据成为你的超能力。
🥇 点击进入Python项目实战专栏,告别碎片化学习,挑战真实项目!本专栏精选Web应用开发(Flask/Django)、数据分析可视化、自动化办公系统、简易爬虫框架、API接口开发等综合项目。通过需求分析、架构设计、编码实现、测试部署的全流程,深入掌握工程化开发、代码复用、调试排错与团队协作核心能力,积累高质量作品集,真正具备解决复杂问题的Python实战经验。
在日常工作和学习中,我们经常会遇到需要对大量文件进行重命名的情况。如果手动一个个修改,不仅耗时费力,还容易出错。这时,一个支持正则匹配模式的文件批量重命名工具就显得尤为重要。本文将详细介绍如何使用 Python 开发这样一款工具,让你轻松应对文件批量重命名的需求。
一、工具功能介绍
这款文件批量重命名工具(正则匹配模式)主要具备以下功能:
-
支持选择目标文件夹,对该文件夹内的所有文件进行批量处理。
-
可以使用正则表达式匹配文件原名称,实现灵活的匹配规则。
-
能够根据自定义的命名规则对匹配到的文件进行重命名操作。
-
提供预览功能,在执行重命名操作前,可以查看重命名后的效果,避免误操作。
-
具备日志记录功能,记录重命名过程中的详细信息,方便后续查看和追溯。
二、开发环境
-
操作系统:Windows 10、macOS 或 Linux(本文以 Windows 10 为例)
-
Python 版本:Python 3.8 及以上
-
所需库:os、re、tkinter(用于图形界面开发)
三、实现思路
-
图形界面搭建:使用
tkinter
库创建一个简单直观的图形界面,包括文件夹选择按钮、正则表达式输入框、命名规则输入框、预览按钮、重命名按钮以及预览结果显示区域和日志显示区域。 -
文件夹选择功能:通过
tkinter
的文件选择对话框,让用户选择需要进行文件重命名的目标文件夹。 -
正则匹配功能:使用
re
库,根据用户输入的正则表达式,对目标文件夹内的文件名称进行匹配。 -
预览功能:根据用户输入的命名规则,对匹配到的文件生成新的名称,并在预览结果显示区域展示,让用户确认是否符合预期。
-
重命名功能:当用户确认预览结果无误后,执行重命名操作,将文件的原名称修改为新名称。
-
日志记录功能:在重命名过程中,记录每个文件的重命名情况,包括原名称、新名称以及是否重命名成功等信息,并在日志显示区域展示。
四、代码实现
(一)导入所需库
首先,我们需要导入开发过程中所需的库,包括 os、re 和 tkinter
。
import osimport reimport tkinter as tkfrom tkinter import filedialog, scrolledtext, messagebox
(二)创建主窗口
使用 tkinter
创建一个主窗口,并设置窗口的标题、大小和位置等属性。
class FileRenameTool: def __init__(self, root): self.root = root self.root.title(\"文件批量重命名工具(正则匹配模式)\") self.root.geometry(\"800x600\") self.root.resizable(True, True) # 初始化变量 self.folder_path = tk.StringVar() self.regex_pattern = tk.StringVar() self.rename_rule = tk.StringVar() self.file_list = [] # 存储文件信息的列表,每个元素是一个字典,包含原名称和新名称等信息 # 创建界面元素 self.create_widgets() def create_widgets(self): # 文件夹选择区域 folder_frame = tk.Frame(self.root) folder_frame.pack(pady=10, fill=tk.X, padx=10) tk.Label(folder_frame, text=\"目标文件夹:\").pack(side=tk.LEFT) tk.Entry(folder_frame, textvariable=self.folder_path, width=50).pack(side=tk.LEFT, padx=5) tk.Button(folder_frame, text=\"浏览\", command=self.select_folder).pack(side=tk.LEFT) # 正则表达式和命名规则输入区域 input_frame = tk.Frame(self.root) input_frame.pack(pady=10, fill=tk.X, padx=10) tk.Label(input_frame, text=\"正则表达式:\").pack(side=tk.LEFT) tk.Entry(input_frame, textvariable=self.regex_pattern, width=30).pack(side=tk.LEFT, padx=5) tk.Label(input_frame, text=\"命名规则:\").pack(side=tk.LEFT, padx=5) tk.Entry(input_frame, textvariable=self.rename_rule, width=30).pack(side=tk.LEFT, padx=5) # 按钮区域 button_frame = tk.Frame(self.root) button_frame.pack(pady=10) tk.Button(button_frame, text=\"预览\", command=self.preview_rename).pack(side=tk.LEFT, padx=10) tk.Button(button_frame, text=\"重命名\", command=self.perform_rename).pack(side=tk.LEFT, padx=10) # 预览结果显示区域 preview_frame = tk.Frame(self.root) preview_frame.pack(pady=10, fill=tk.BOTH, expand=True, padx=10) tk.Label(preview_frame, text=\"预览结果:\").pack(anchor=tk.W) self.preview_text = scrolledtext.ScrolledText(preview_frame, wrap=tk.WORD) self.preview_text.pack(fill=tk.BOTH, expand=True) # 日志显示区域 log_frame = tk.Frame(self.root) log_frame.pack(pady=10, fill=tk.BOTH, expand=True, padx=10) tk.Label(log_frame, text=\"日志信息:\").pack(anchor=tk.W) self.log_text = scrolledtext.ScrolledText(log_frame, wrap=tk.WORD, fg=\"blue\") self.log_text.pack(fill=tk.BOTH, expand=True)
(三)实现文件夹选择功能
通过 filedialog.askdirectory ()
方法让用户选择目标文件夹,并将选择的文件夹路径显示在输入框中。
def select_folder(self): folder = filedialog.askdirectory() if folder: self.folder_path.set(folder) self.log_text.insert(tk.END, f\"已选择目标文件夹:{folder}\\n\")
(四)实现预览功能
根据用户输入的正则表达式和命名规则,对目标文件夹内的文件进行匹配和新名称生成,并将结果显示在预览区域。
def preview_rename(self): # 清空预览区域和文件列表 self.preview_text.delete(1.0, tk.END) self.file_list.clear() folder = self.folder_path.get() regex = self.regex_pattern.get() rule = self.rename_rule.get() if not folder: messagebox.showerror(\"错误\", \"请选择目标文件夹\") return if not regex: messagebox.showerror(\"错误\", \"请输入正则表达式\") return if not rule: messagebox.showerror(\"错误\", \"请输入命名规则\") return try: # 编译正则表达式 pattern = re.compile(regex) except re.error as e: messagebox.showerror(\"错误\", f\"正则表达式无效:{e}\") return # 遍历目标文件夹内的文件 for file_name in os.listdir(folder): file_path = os.path.join(folder, file_name) if os.path.isfile(file_path): # 使用正则表达式匹配文件名称 match = pattern.match(file_name) if match: # 根据命名规则生成新名称 new_name = pattern.sub(rule, file_name) self.file_list.append({ \"old_path\": file_path, \"old_name\": file_name, \"new_name\": new_name, \"new_path\": os.path.join(folder, new_name) }) self.preview_text.insert(tk.END, f\"{file_name} -> {new_name}\\n\") if not self.file_list: self.preview_text.insert(tk.END, \"没有匹配到任何文件\")
(五)实现重命名功能
根据预览结果,对文件进行重命名操作,并记录日志信息。
def perform_rename(self): if not self.file_list: messagebox.showinfo(\"提示\", \"请先进行预览\") return # 确认是否执行重命名操作 if not messagebox.askyesno(\"确认\", \"确定要执行重命名操作吗?\"): return # 清空日志区域 self.log_text.delete(1.0, tk.END) success_count = 0 fail_count = 0 for file_info in self.file_list: old_path = file_info[\"old_path\"] new_path = file_info[\"new_path\"] old_name = file_info[\"old_name\"] new_name = file_info[\"new_name\"] try: # 执行重命名操作 os.rename(old_path, new_path) self.log_text.insert(tk.END, f\"成功:{old_name} -> {new_name}\\n\") success_count += 1 except Exception as e: self.log_text.insert(tk.END, f\"失败:{old_name} -> {new_name},错误信息:{e}\\n\") fail_count += 1 self.log_text.insert(tk.END, f\"\\n重命名完成,成功{success_count}个,失败{fail_count}个\\n\") messagebox.showinfo(\"完成\", f\"重命名完成,成功{success_count}个,失败{fail_count}个\")
(六)主程序入口
创建主窗口实例,并启动事件循环。
if __name__ == \"__main__\": root = tk.Tk() app = FileRenameTool(root) root.mainloop()
五、使用示例
(一)准备工作
假设有一个文件夹 “TEMP”,里面有以下文件:
-
image_001.jpg
-
image_002.jpg
-
image_003.jpg
-
image_004.jpg
-
image_005.jpg
-
test.jpg
-
test.txt
我们想要将所有以 “image_” 开头的图片文件重命名为 “pic_001.jpg”、“pic_002.jpg”、“pic_003.jpg”、“pic_004.jpg”、“pic_005.jpg” 的形式。
(二)操作步骤
-
运行程序,打开文件批量重命名工具。
-
点击 “浏览” 按钮,选择 “TEMP” 文件夹。
-
在 “正则表达式” 输入框中输入 “image_(\\d+).jpg”,该正则表达式用于匹配以 “image_” 开头,后面跟数字,以 “.jpg” 结尾的文件。
-
在 “命名规则” 输入框中输入 “pic_\\1.jpg”,其中 “\\1” 表示正则表达式中匹配到的第一个分组(即数字部分)。
-
点击 “预览” 按钮,在预览结果区域可以看到:
-
image_001.jpg -> pic_001.jpg
-
image_002.jpg -> pic_002.jpg
-
image_004.jpg -> pic_004.jpg
-
image_005.jpg -> pic_005.jpg
-
image_003.jpg -> pic_003.jpg
-
确认预览结果无误后,点击 “重命名” 按钮,在弹出的确认对话框中点击 “是”,程序将执行重命名操作。
-
重命名完成后,在日志信息区域可以看到重命名的结果,包括成功和失败的数量以及详细信息。
六、扩展方向
-
支持子文件夹:目前的工具只能对目标文件夹内的文件进行重命名,不支持子文件夹。可以扩展功能,让用户选择是否对所有子文件夹内的文件进行重命名。
-
添加更多命名规则选项:除了使用正则表达式的分组进行命名外,还可以添加按序号、日期等方式进行命名的选项。
-
支持文件过滤:可以添加文件类型过滤功能,让用户只对特定类型的文件进行重命名。
-
保存和加载配置:让用户可以保存常用的正则表达式和命名规则配置,方便下次使用时直接加载。
通过本文的介绍,相信你已经掌握了使用 Python 开发文件批量重命名工具(正则匹配模式)的方法。你可以根据自己的需求对代码进行修改和扩展,使其更加符合实际使用场景。希望这款工具能为你的工作和学习带来便利!
附录:扩展学习资源
- 官方资源:
- Python官网:https://www.python.org
- PyPI:https://pypi.org(查找第三方库)
- 安装包等相关文件(另附带pycharm工具),网盘下载地址:https://pan.quark.cn/s/649af731037c
- 学习资料视频和文档资源,网盘下载地址: https://pan.quark.cn/s/ee16901a8954
- 本专栏特色资源:
- 代码资源仓库:CSDN专属资源在线获取
- 海量Python教程:关注公众号:xcLeigh,获取网盘地址
- 一对一答疑:添加微信与博主在线沟通(
备注“Python专栏”
)
联系博主
xcLeigh 博主,全栈领域优质创作者,博客专家,目前,活跃在CSDN、微信公众号、小红书、知乎、掘金、快手、思否、微博、51CTO、B站、腾讯云开发者社区、阿里云开发者社区等平台,全网拥有几十万的粉丝,全网统一IP为 xcLeigh。希望通过我的分享,让大家能在喜悦的情况下收获到有用的知识。主要分享编程、开发工具、算法、技术学习心得等内容。很多读者评价他的文章简洁易懂,尤其对于一些复杂的技术话题,他能通过通俗的语言来解释,帮助初学者更好地理解。博客通常也会涉及一些实践经验,项目分享以及解决实际开发中遇到的问题。如果你是开发领域的初学者,或者在学习一些新的编程语言或框架,关注他的文章对你有很大帮助。
亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。
愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。
至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。
💞 关注博主 🌀 带你实现畅游前后端!
🏰 大屏可视化 🌀 带你体验酷炫大屏!
💯 神秘个人简介 🌀 带你体验不一样得介绍!
🥇 从零到一学习Python 🌀 带你玩转Python技术流!
🏆 前沿应用深度测评 🌀 前沿AI产品热门应用在线等你来发掘!
💦 注:本文撰写于CSDN平台,作者:xcLeigh(所有权归作者所有) ,https://xcleigh.blog.csdn.net/,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。
📣 亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(或者关注下方公众号,看见后第一时间回复,还有海量编程资料等你来领!),博主看见后一定及时给您答复 💌💌💌