当前位置: 首页 > web >正文

工具分享02 | Python批量文件重命名工具

文章目录

  • 1. 运行流程
    • 1.1 工具面板
    • 1.2 选择原文件夹、目标文件夹,添加前缀并预览
    • 1.3 执行重命名操作
    • 1.4 重命名完成
    • 1.5 执行结果
    • 1.6 添加前缀及后缀
    • 1.7 替换部分名称
    • 1.8 前缀+后缀+替换
  • 2. 绘图
    • 2.1 框架结构布局
    • 2.2 添加菜单
    • 2.3 加载文件
    • 2.4 按规则执行重命名操作
    • 2.5 异常提示
  • 🏳️‍🌈 3. 更多可视化项目源码+数据

大家好,我是 👉 【Python当打之年(点击跳转)】

本期使用Python的Tkinter制作一个 批量修改文件名的工具,可以选择文件类型(.txt、.doc、.docx、.csv、.xlsx、.xls、.pdf’),可以自定义添加前缀、后缀及文件名字符替换(可单选、可多选)。希望对大家有所帮助,如有疑问或者需要改进的地方可以联系小编。

1. 运行流程

1.1 工具面板

在这里插入图片描述

1.2 选择原文件夹、目标文件夹,添加前缀并预览

在这里插入图片描述

1.3 执行重命名操作

在这里插入图片描述

1.4 重命名完成

在这里插入图片描述

1.5 执行结果

在这里插入图片描述

1.6 添加前缀及后缀

在这里插入图片描述

执行结果
在这里插入图片描述

1.7 替换部分名称

在这里插入图片描述

执行结果
在这里插入图片描述

1.8 前缀+后缀+替换

在这里插入图片描述

执行结果
在这里插入图片描述

2. 绘图

2.1 框架结构布局

def create_widgets(self):# 文件夹选择部分folder_frame = ttk.LabelFrame(self.root, text="文件夹设置", style="Bold.TLabelframe")folder_frame.pack(fill="x", padx=10, pady=10, ipadx=5, ipady=5)# 源文件夹ttk.Label(folder_frame, text="源文件夹:").grid(row=0, column=0, sticky="w", padx=5, pady=5)self.source_var = tk.StringVar()source_entry = ttk.Entry(folder_frame, textvariable=self.source_var)source_entry.grid(row=0, column=1, sticky="we", padx=5, pady=5)ttk.Button(folder_frame, text="浏览...", command=self.select_source_folder).grid(row=0, column=2, padx=5, pady=5)# 目标文件夹ttk.Label(folder_frame, text="目标文件夹:").grid(row=1, column=0, sticky="w", padx=5, pady=5)self.dest_var = tk.StringVar()dest_entry = ttk.Entry(folder_frame, textvariable=self.dest_var)dest_entry.grid(row=1, column=1, sticky="we", padx=5, pady=5)ttk.Button(folder_frame, text="浏览...", command=self.select_dest_folder).grid(row=1, column=2, padx=5, pady=5)# 文件类型筛选部分ttk.Label(folder_frame, text="文件类型筛选:").grid(row=2, column=0, sticky="w", padx=5, pady=5)type_frame = ttk.Frame(folder_frame)type_frame.grid(row=2, column=1, columnspan=2, sticky="w", padx=5, pady=5)# 创建文件类型复选框self.type_vars = {}for i, ext in enumerate(self.file_types):self.type_vars[ext] = tk.BooleanVar(value=True) cb = ttk.Checkbutton(type_frame, text=ext, variable=self.type_vars[ext])cb.grid(row=0, column=i, padx=5, sticky="w")# 全选/取消全选按钮ttk.Button(type_frame, text="全选", command=lambda:self.toggle_all_types(True)).grid(row=0, column=len(self.file_types)+1, padx=5, sticky="w")ttk.Button(type_frame, text="取消全选", command=lambda:self.toggle_all_types(False)).grid(row=0, column=len(self.file_types)+2, padx=5, sticky="w")operation_frame = ttk.LabelFrame(self.root, text="重命名操作 (可多选)", style="Bold.TLabelframe")operation_frame.pack(fill="x", padx=10, pady=10, ipadx=5, ipady=5)# 创建垂直排列的操作框架vertical_frame = ttk.Frame(operation_frame)vertical_frame.pack(fill="x", padx=5, pady=5)# 前缀操作组 - 垂直排列prefix_frame = ttk.Frame(vertical_frame)prefix_frame.pack(fill="x", pady=5)# 前缀复选框prefix_check = ttk.Checkbutton(prefix_frame, text="添加前缀", variable=self.prefix_enabled)prefix_check.pack(side="left", padx=(0, 10))

2.2 添加菜单

def create_menu(self):"""创建菜单栏"""mainmenu = Menu(self.root)# 帮助菜单aboutmenu = tk.Menu(mainmenu, tearoff=False)aboutmenu.add_command(label="联系作者", command=self.about_command)mainmenu.add_cascade(label="帮助", menu=aboutmenu)

2.3 加载文件

def load_files(self):source = self.source_var.get()ifnotsource:returntry:self.files = []for f in os.listdir(source):file_path = os.path.join(source, f)if os.path.isfile(file_path):# 检查文件扩展名是否在选中的类型中ext = os.path.splitext(f)[1].lower()if ext inself.get_selected_types():self.files.append(f)self.status_var.set(f"找到 {len(self.files)} 个文件")except Exception as e:messagebox.showerror("错误", f"无法读取文件列表: {str(e)}")self.status_var.set("读取文件列表出错")

2.4 按规则执行重命名操作

def apply_rename_rules(self, filename):original = filename order = self.order_var.get()if order == "前缀→后缀→替换":ifself.prefix_enabled.get():prefix = self.prefix_var.get().strip()filename = prefix + filename if prefix else filenameifself.suffix_enabled.get():name, ext = os.path.splitext(filename)suffix = self.suffix_var.get().strip()filename = name + suffix + ext if suffix else filenameifself.replace_enabled.get():search = self.search_var.get().strip()replace = self.replace_var.get().strip()filename = filename.replace(search, replace) if search else filename

2.5 异常提示

def execute_rename(self):# 检查是否有至少一个操作被选中ifnot any([self.prefix_enabled.get(), self.suffix_enabled.get(), self.replace_enabled.get()]):messagebox.showwarning("警告", "请至少选择一种重命名操作")return# 获取当前选中的文件类型self.selected_types = self.get_selected_types()ifnotself.selected_types:messagebox.showwarning("警告", "请至少选择一种文件类型")returnsource = self.source_var.get()destination = self.dest_var.get()ifnotsource:messagebox.showwarning("警告", "请先选择源文件夹")returnifnotdestination:destination = source# 确认操作ifnot messagebox.askyesno("确认", "确定要执行重命名操作吗?"):return

🏳️‍🌈 3. 更多可视化项目源码+数据

点击跳转:【全部可视化项目源码+数据】


以上就是本期为大家整理的全部内容了,赶快练习起来吧,原创不易,喜欢的朋友可以点赞、收藏也可以分享注明出处)让更多人知道。

http://www.xdnf.cn/news/16273.html

相关文章:

  • 从零用java实现 小红书 springboot vue uniapp(14) 集成阿里云短信验证码
  • 核心数据结构:DataFrame
  • 征服 Linux 网络:核心服务与实战解析
  • 从指标定义到AI执行流:衡石SENSE 6.0的BI PaaS如何重构ISV分析链路
  • day46.通道注意力
  • jina-embedding-v4 环境搭建全过程
  • 实验-OSPF
  • 智能Agent场景实战指南 Day 20:Agent多模态交互能力
  • Windows 系统中 CURL 命令使用指南及常见错误解析
  • ai存在意义的对话
  • Unity UI的未来之路:从UGUI到UI Toolkit的架构演进与特性剖析(3)
  • UFS 描述符、标志和属性(二)
  • Java进阶3:Java集合框架、ArrayList、LinkedList、HashSet、HashMap和他们的迭代器
  • 外企本土化布局对国内连接器企业影响几何?
  • IO密集型、CPU密集型、负载、负载均衡
  • 从零开发Java坦克大战:架构设计与难点突破 (上)
  • 使用Jmeter进行http接口性能测试
  • 车规级CANFD芯片在汽车车身控制方案中的应用解析
  • 【时时三省】(C语言基础)怎样定义和使用指向函数的指针变量
  • ubuntu的tar解压指令相关
  • 基于单片机智能交通灯设计
  • Mac电脑使用IDEA启动服务后,报service异常
  • AI总结视频以及谷歌浏览器插件安装步骤
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-20,(知识点:热阻的概念,散热)
  • 实时云渲染将UE像素流嵌入业务系统,实现二维管理系统与数字孪生三维可视化程序的无缝交互
  • 嵌入式学习-(李宏毅)机器学习(2)-day29
  • 图片查重从设计到实现(2)Milvus安装准备etcd介绍、应用场景及Docker安装配置
  • SkyWalking异步采集spring gateway日志
  • jax study notes[19]
  • 【C++】简单学——list类