中国建设银行北海招聘信息网站,现在的网站开发方式,wordpress企业版百度小程序,南京凯盛建设集团官方网站自动化#xff1a;批量文件重命名
1、前言 2、效果图 3、源码
一、前言
今天来分享一款好玩的自动化脚#xff1a;批量文件重命名 有时候呢#xff0c;你的文件被下载下来文件名都是乱七八糟毫无规律#xff0c;但是当时你下载的时候没办法重名或者你又不想另存为重新重…自动化批量文件重命名
1、前言 2、效果图 3、源码
一、前言
今天来分享一款好玩的自动化脚批量文件重命名 有时候呢你的文件被下载下来文件名都是乱七八糟毫无规律但是当时你下载的时候没办法重名或者你又不想另存为重新重命名。 比如下载下来的照片每一个文件名字系统给你安排的都是系统自身的喜好
所以它来了一次性完成。
二、效果 三、源码
这里有一个智能家居项目(毕设)可以看看(开源码、论、PPT)
import os
import tkinter as tk
from tkinter import ttk, filedialog, messagebox
from pathlib import Pathclass BatchRenameApp:def __init__(self, root):self.root rootself.root.title( 批量文件重命名工具 v1.0)self.root.geometry(800x600)# 变量初始化self.folder_path tk.StringVar()self.prefix tk.StringVar(value)self.suffix tk.StringVar(value)self.start_num tk.IntVar(value1)self.ext_filter tk.StringVar(value*)self.dry_run tk.BooleanVar(valueFalse)self.file_list []# 创建UI组件self.create_widgets()def create_widgets(self):# 顶部框架 - 文件夹选择和基本信息top_frame ttk.LabelFrame(self.root, text文件夹设置, padding(10, 5))top_frame.pack(filltk.X, padx10, pady5)ttk.Label(top_frame, text目标文件夹:).grid(row0, column0, stickytk.W)ttk.Entry(top_frame, textvariableself.folder_path, width50).grid(row0, column1, padx5)ttk.Button(top_frame, text浏览..., commandself.browse_folder).grid(row0, column2)# 中间框架 - 重命名规则设置middle_frame ttk.LabelFrame(self.root, text重命名规则, padding(10, 5))middle_frame.pack(filltk.X, padx10, pady5)ttk.Label(middle_frame, text文件名前缀:).grid(row0, column0, stickytk.W)ttk.Entry(middle_frame, textvariableself.prefix).grid(row0, column1, padx5, pady5, stickytk.W)ttk.Label(middle_frame, text文件名后缀:).grid(row1, column0, stickytk.W)ttk.Entry(middle_frame, textvariableself.suffix).grid(row1, column1, padx5, pady5, stickytk.W)ttk.Label(middle_frame, text起始编号:).grid(row2, column0, stickytk.W)ttk.Spinbox(middle_frame, textvariableself.start_num, from_1, to9999).grid(row2, column1, padx5, pady5,stickytk.W)ttk.Label(middle_frame, text文件类型:).grid(row3, column0, stickytk.W)ttk.Entry(middle_frame, textvariableself.ext_filter).grid(row3, column1, padx5, pady5, stickytk.W)ttk.Checkbutton(middle_frame, text仅预览(不实际修改), variableself.dry_run).grid(row4, column0,columnspan2, pady5)# 底部框架 - 操作按钮和文件列表bottom_frame ttk.Frame(self.root)bottom_frame.pack(filltk.BOTH, expandTrue, padx10, pady5)button_frame ttk.Frame(bottom_frame)button_frame.pack(filltk.X, pady5)ttk.Button(button_frame, text扫描文件, commandself.scan_files).pack(sidetk.LEFT, padx5)ttk.Button(button_frame, text预览重命名, commandself.preview_rename).pack(sidetk.LEFT, padx5)ttk.Button(button_frame, text执行重命名, commandself.execute_rename).pack(sidetk.LEFT, padx5)# 文件列表树状视图self.tree ttk.Treeview(bottom_frame, columns(new_name, status), showheadings)self.tree.heading(#0, text原始文件名)self.tree.heading(new_name, text新文件名)self.tree.heading(status, text状态)vsb ttk.Scrollbar(bottom_frame, orientvertical, commandself.tree.yview)hsb ttk.Scrollbar(bottom_frame, orienthorizontal, commandself.tree.xview)self.tree.configure(yscrollcommandvsb.set, xscrollcommandhsb.set)self.tree.pack(sidetk.LEFT, filltk.BOTH, expandTrue)vsb.pack(sidetk.RIGHT, filltk.Y)hsb.pack(sidetk.BOTTOM, filltk.X)def browse_folder(self):folder_selected filedialog.askdirectory()if folder_selected:self.folder_path.set(folder_selected)self.scan_files()def scan_files(self):folder Path(self.folder_path.get())if not folder.exists():messagebox.showerror( 错误, 文件夹不存在!)returnext self.ext_filter.get().strip()pattern f*.{ext} if ext ! * else *try:self.file_list sorted([f for f in folder.glob(pattern) if f.is_file() and not f.name.startswith(.)])self.update_file_list()messagebox.showinfo( 完成, f找到 {len(self.file_list)} 个文件)except Exception as e:messagebox.showerror( 错误, f扫描文件时出错: {str(e)})def update_file_list(self):self.tree.delete(*self.tree.get_children())for i, file in enumerate(self.file_list, startself.start_num.get()):new_name f{self.prefix.get()}{i}{self.suffix.get()}{file.suffix}self.tree.insert(, tk.END, textfile.name, values(new_name, 待处理))def preview_rename(self):if not self.file_list:messagebox.showwarning( 警告, 请先扫描文件!)returnself.dry_run.set(True)self.update_file_list()messagebox.showinfo( 预览, 已生成重命名预览请查看文件列表)def execute_rename(self):if not self.file_list:messagebox.showwarning( 警告, 请先扫描文件!)returnif self.dry_run.get():messagebox.showinfo( 信息, 当前处于预览模式不会实际修改文件)returnif not messagebox.askyesno( 确认, f确定要重命名 {len(self.file_list)} 个文件吗?):returnsuccess_count 0for i, file in enumerate(self.file_list, startself.start_num.get()):new_name f{self.prefix.get()}{i}{self.suffix.get()}{file.suffix}new_path file.with_name(new_name)try:file.rename(new_path)self.tree.item(self.tree.get_children()[i - self.start_num.get()],values(new_name, 成功))success_count 1except Exception as e:self.tree.item(self.tree.get_children()[i - self.start_num.get()],values(new_name, f失败: {str(e)}))messagebox.showinfo( 完成, f操作完成!\n成功: {success_count}\n失败: {len(self.file_list) - success_count})self.file_list [] # 清空文件列表防止重复操作if __name__ __main__:root tk.Tk()app BatchRenameApp(root)root.mainloop()