使用Python編寫批量文件重命名工具
一、前言
今天來分享一款好玩的自動(dòng)化腳:批量文件重命名有時(shí)候呢,你的文件被下載下來文件名都是亂七八糟毫無規(guī)律,但是當(dāng)時(shí)你下載的時(shí)候沒辦法重名或者你又不想另存為重新重命名。
比如:下載下來的照片每一個(gè)文件名字系統(tǒng)給你安排的都是系統(tǒng)自身的喜好
所以它來了,一次性完成。
二、效果
三、源碼
import os import tkinter as tk from tkinter import ttk, filedialog, messagebox from pathlib import Path class BatchRenameApp: def __init__(self, root): self.root = root self.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(value=1) self.ext_filter = tk.StringVar(value="*") self.dry_run = tk.BooleanVar(value=False) self.file_list = [] # 創(chuàng)建UI組件 self.create_widgets() def create_widgets(self): # 頂部框架 - 文件夾選擇和基本信息 top_frame = ttk.LabelFrame(self.root, text="文件夾設(shè)置", padding=(10, 5)) top_frame.pack(fill=tk.X, padx=10, pady=5) ttk.Label(top_frame, text="目標(biāo)文件夾:").grid(row=0, column=0, sticky=tk.W) ttk.Entry(top_frame, textvariable=self.folder_path, width=50).grid(row=0, column=1, padx=5) ttk.Button(top_frame, text="瀏覽...", command=self.browse_folder).grid(row=0, column=2) # 中間框架 - 重命名規(guī)則設(shè)置 middle_frame = ttk.LabelFrame(self.root, text="重命名規(guī)則", padding=(10, 5)) middle_frame.pack(fill=tk.X, padx=10, pady=5) ttk.Label(middle_frame, text="文件名前綴:").grid(row=0, column=0, sticky=tk.W) ttk.Entry(middle_frame, textvariable=self.prefix).grid(row=0, column=1, padx=5, pady=5, sticky=tk.W) ttk.Label(middle_frame, text="文件名后綴:").grid(row=1, column=0, sticky=tk.W) ttk.Entry(middle_frame, textvariable=self.suffix).grid(row=1, column=1, padx=5, pady=5, sticky=tk.W) ttk.Label(middle_frame, text="起始編號(hào):").grid(row=2, column=0, sticky=tk.W) ttk.Spinbox(middle_frame, textvariable=self.start_num, from_=1, to=9999).grid(row=2, column=1, padx=5, pady=5, sticky=tk.W) ttk.Label(middle_frame, text="文件類型:").grid(row=3, column=0, sticky=tk.W) ttk.Entry(middle_frame, textvariable=self.ext_filter).grid(row=3, column=1, padx=5, pady=5, sticky=tk.W) ttk.Checkbutton(middle_frame, text="僅預(yù)覽(不實(shí)際修改)", variable=self.dry_run).grid(row=4, column=0, columnspan=2, pady=5) # 底部框架 - 操作按鈕和文件列表 bottom_frame = ttk.Frame(self.root) bottom_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=5) button_frame = ttk.Frame(bottom_frame) button_frame.pack(fill=tk.X, pady=5) ttk.Button(button_frame, text="掃描文件", command=self.scan_files).pack(side=tk.LEFT, padx=5) ttk.Button(button_frame, text="預(yù)覽重命名", command=self.preview_rename).pack(side=tk.LEFT, padx=5) ttk.Button(button_frame, text="執(zhí)行重命名", command=self.execute_rename).pack(side=tk.LEFT, padx=5) # 文件列表樹狀視圖 self.tree = ttk.Treeview(bottom_frame, columns=("new_name", "status"), show="headings") self.tree.heading("#0", text="原始文件名") self.tree.heading("new_name", text="新文件名") self.tree.heading("status", text="狀態(tài)") vsb = ttk.Scrollbar(bottom_frame, orient="vertical", command=self.tree.yview) hsb = ttk.Scrollbar(bottom_frame, orient="horizontal", command=self.tree.xview) self.tree.configure(yscrollcommand=vsb.set, xscrollcommand=hsb.set) self.tree.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) vsb.pack(side=tk.RIGHT, fill=tk.Y) hsb.pack(side=tk.BOTTOM, fill=tk.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(" 錯(cuò)誤", "文件夾不存在!") return ext = 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)} 個(gè)文件") except Exception as e: messagebox.showerror(" 錯(cuò)誤", f"掃描文件時(shí)出錯(cuò): {str(e)}") def update_file_list(self): self.tree.delete(*self.tree.get_children()) for i, file in enumerate(self.file_list, start=self.start_num.get()): new_name = f"{self.prefix.get()}{i}{self.suffix.get()}{file.suffix}" self.tree.insert("", tk.END, text=file.name, values=(new_name, "待處理")) def preview_rename(self): if not self.file_list: messagebox.showwarning(" 警告", "請(qǐng)先掃描文件!") return self.dry_run.set(True) self.update_file_list() messagebox.showinfo(" 預(yù)覽", "已生成重命名預(yù)覽,請(qǐng)查看文件列表") def execute_rename(self): if not self.file_list: messagebox.showwarning(" 警告", "請(qǐng)先掃描文件!") return if self.dry_run.get(): messagebox.showinfo(" 信息", "當(dāng)前處于預(yù)覽模式,不會(huì)實(shí)際修改文件") return if not messagebox.askyesno(" 確認(rèn)", f"確定要重命名 {len(self.file_list)} 個(gè)文件嗎?"): return success_count = 0 for i, file in enumerate(self.file_list, start=self.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 += 1 except 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 = [] # 清空文件列表,防止重復(fù)操作 if __name__ == "__main__": root = tk.Tk() app = BatchRenameApp(root) root.mainloop()
到此這篇關(guān)于使用Python編寫批量文件重命名工具的文章就介紹到這了,更多相關(guān)Python文件重命名內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)網(wǎng)頁錄音效果
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)網(wǎng)頁錄音效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10聯(lián)邦學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)FedAvg算法實(shí)現(xiàn)
這篇文章主要為大家介紹了聯(lián)邦學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)FedAvg算法實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Python中numpy數(shù)組真值判斷的實(shí)現(xiàn)
在Python編程中,經(jīng)常需要對(duì)數(shù)組進(jìn)行真值判斷,本文就來介紹一下Python中numpy數(shù)組真值判斷的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09python判斷一組數(shù)呈上升還是下降趨勢(shì)的操作方法
要判斷一組數(shù)(數(shù)列)是呈上升趨勢(shì)、下降趨勢(shì)還是無明顯趨勢(shì),我們可以比較數(shù)列中相鄰元素的差值,這篇文章主要介紹了python?如何判斷一組數(shù)呈上升還是下降趨勢(shì),需要的朋友可以參考下2024-06-06