自動化:批量文件重命名

自動化:批量文件重命名

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(value=1)self.ext_filter = tk.StringVar(value="*")self.dry_run = tk.BooleanVar(value=False)self.file_list = []# 創建UI組件self.create_widgets()def create_widgets(self):# 頂部框架 - 文件夾選擇和基本信息top_frame = ttk.LabelFrame(self.root, text="文件夾設置", padding=(10, 5))top_frame.pack(fill=tk.X, padx=10, pady=5)ttk.Label(top_frame, text="目標文件夾:").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)# 中間框架 - 重命名規則設置middle_frame = ttk.LabelFrame(self.root, text="重命名規則", 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="起始編號:").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="僅預覽(不實際修改)", 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="預覽重命名", command=self.preview_rename).pack(side=tk.LEFT, padx=5)ttk.Button(button_frame, text="執行重命名", 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="狀態")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(" 錯誤", "文件夾不存在!")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, 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(" 警告", "請先掃描文件!")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, 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 += 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()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/906059.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906059.shtml
英文地址,請注明出處:http://en.pswp.cn/news/906059.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

VueUse/Core:提升Vue開發效率的實用工具庫

文章目錄 引言什么是VueUse/Core?為什么選擇VueUse/Core?核心功能詳解1. 狀態管理2. 元素操作3. 實用工具函數4. 瀏覽器API封裝5. 傳感器相關 實戰示例:構建一個拖拽上傳組件性能優化技巧與原生實現對比常見問題解答總結 引言 在現代前端開發…

stm32 ADC單通道轉換

stm32c8t6僅有12位分辨率 1、單次轉換 非掃描 1、初始化 void Ad_Init() {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);//配置ADCCLK時鐘分頻,ADC的輸入時鐘不得超過14MHzRCC_ADCCLKConfig(RCC_PCLK2_Div6);G…

2KW壓縮機驅動參考設計【SCH篇】

實物展示: ACDC: VAC和VAC-為交流電壓檢測: 1.C33 C34作為Y電容走線寬度要求: Y電容一般用于L/N到地之間(L-PE 或 N-PE),主要作用是抑制共模干擾。其走線的電流非常小,推薦使用 ≥ 1mm 寬的走…

python05——循環結構

1、while循環 n0 #初始條件 while n<5: #判斷print(hello python) #要重復執行的代碼print(n) #注意同級代碼縮進相同n1 #計數器結果&#xff1a; hello python 0 hello python 1 hello python 2 hello python 3 hello python 4 hello python 5 #求階乘和 sum0 n1 whil…

LINUX編譯、運行、測試lowcoder_CN

參考 二者沒有太大差異。 LINUX編譯、運行、測試lowcoder-CSDN博客 下載 git clone https://github.com/mousheng/lowcoder_CN 或 git clone https://gitcode.com/gh_mirrors/lo/lowcoder_CNcd lowcoder_CN三個模塊 node-service api-service client 每個模塊都有自己的…

Python 基礎之函數命名

幾個問題 使用描述性蛇形命名法&#xff08;snake_case&#xff09;Python函數名應使用什么大小寫格式&#xff1f;為什么函數名要具有描述性&#xff1f;方法的命名規范是什么&#xff1f;函數、變量和類的命名有何區別&#xff1f; Python函數的命名有一些不可違背的硬性規…

redis 命令大全整理

http://doc.redisfans.com/ 原網址 Redis 命令分類 Key(鍵) Key(鍵)命令 exists/del/keys/type/scanobject/move/dump/migratettl/pttl/persist/expireat/pexpireat/expire/pexpirerename/renamenxsort/randomkey/restoreexists 語法:exists key [key ...] 檢查一個或多…

React中useDeferredValue與useTransition終極對比。

文章目錄 前言一、核心差異對比二、代碼示例對比1. useDeferredValue&#xff1a;延遲搜索結果更新2. useTransition&#xff1a;延遲路由切換 三、應用場景總結四、注意事項五、原理剖析1. 核心機制對比2. 關鍵差異3. 代碼實現原理 總結 前言 在React的并發模式下&#xff0c…

高并發內存池|定長內存池的設計

二、定長內存池的設計 設計一個定長的內存池&#xff0c;這個內存池的定長在于&#xff0c;當剩余空間使用完畢后&#xff0c;總是開辟相同長度的新空間來使用。我們會使用到一個指針來切割劃分大空間為小空間。大空間是內存池向系統申請的內存大小&#xff0c;而小空間是程序…

微信小程序 自定義圖片分享-繪制數據圖片以及信息文字

一 、需求 從數據庫中讀取頭像&#xff0c;姓名電話等信息&#xff0c;當分享給女朋友時&#xff0c;每個信息不一樣 二、實現方案 1、先將數據庫中需要的頭像姓名信息讀取出來加載到data 數據項中 data:{firstName:, // 姓名img:, // 頭像shareImage:,// 存儲臨時圖片 } 2…

從零開始理解Jetty:輕量級Java服務器的入門指南

目錄 一、Jetty是什么&#xff1f;先看一個生活比喻 二、5分鐘快速入門&#xff1a;搭建你的第一個Jetty服務 步驟1&#xff1a;Maven依賴配置 步驟2&#xff1a;編寫簡易Servlet&#xff08;廚房廚師&#xff09; 步驟3&#xff1a;組裝服務器&#xff08;餐廳開業準備&am…

深入淺出IIC協議 - 從總線原理到FPGA實戰開發 -- 第一篇:I2C總線協議深度解剖

第一篇&#xff1a;I2C總線協議深度解剖 副標題 : 兩根線如何征服千億設備&#xff1f;詳解硬件工程師必須掌握的通信奧義 1. 為什么I2C仍是嵌入式經典&#xff1f; 1.1 總線拓撲的哲學 拓撲對比圖 SPI需4線N片選 vs I2C僅2線級聯 UART點對點 vs I2C多主從架構 成本控制實…

MySQL 索引優化以及慢查詢優化

在數據庫性能優化中&#xff0c;索引優化和慢查詢優化是兩個關鍵環節。合理使用索引可以顯著提高查詢效率&#xff0c;而識別和優化慢查詢則能提升整體數據庫性能。本文將詳細介紹MySQL索引優化和慢查詢優化的方法和最佳實踐。 一、MySQL 索引優化 1.1 索引的基本概念 索引是…

vue使用Pinia實現不同頁面共享token

文章目錄 一、概述二、使用步驟安裝pinia在vue應用實例中使用pinia在src/stores/token.js中定義store在組件中使用store登錄成功后&#xff0c;將token保存pinia中向后端API發起請求時&#xff0c;攜帶從pinia中獲取的token 三、參考資料 一、概述 Pinia是Vue的專屬狀態管理庫…

通俗版解釋CPU、核心、進程、線程、協程的定義及關系

通俗版解釋&#xff08;比喻法&#xff09; 1. CPU 和核心 CPU 一個工廠&#xff08;負責干活的總部&#xff09;。核心 工廠里的車間&#xff08;比如工廠有4個車間&#xff0c;就能同時處理4個任務&#xff09;。 2. 進程 進程 一家獨立運營的公司&#xff08;比如一家…

用 VS Code / PyCharm 編寫你的第一個 Python 程序

用ChatGPT做軟件測試 編寫你的第一個 Python 程序——不只是“Hello, World”&#xff0c;而是構建認知、習慣與未來的起點 “第一行代碼&#xff0c;是一個開發者認知世界的方式。” 編程的入門&#xff0c;不只是運行一個字符串輸出&#xff0c;更是開始用計算機思維來理解、…

amd架構主機構建arm架構kkfileview

修改本機使用鏡像倉庫地址 vim /etc/docker/daemon.json {“experimental”: true, “registry-mirrors”: [ “https://docker.m.daocloud.io”, “https://docker.1panel.live”, “http://mirrors.ustc.edu.cn/”, “http://mirror.azure.cn/”, “https://docker.hpcloud.c…

[Linux] vim及gcc工具

目錄 一、vim 1.vim的模式 2.vim的命令集 (1):命令模式 (2):底行模式 3.vim配置 二、gcc 1.gcc格式及選項 2.工作布置 三、自動化構建工具makefile 1.基本使用方法 2.配置文件解析 3.拓展 在linux操作系統的常用工具中&#xff0c;常用vim來進行程序的編寫&#xff1b…

數據庫3——視圖及安全性

視圖及安全性 學習內容學習感受 學習內容 一、實驗目的與要求&#xff1a; 1、設計用戶子模式 2、根據實際需要創建用戶角色及用戶&#xff0c;并授權 3、針對不同級別的用戶定義不同的視圖&#xff0c;以保證系統的安全性 二、實驗內容&#xff1a; 1、 先創建四類用戶角色&…

Oracle數據庫如何進行冷備份和恢復

數據庫的冷備份指的是數據庫處于關閉或者MOUNT狀態下的備份&#xff0c;備份文件包括數據文件、日志文件和控制文件。數據庫冷備份所用的時間主要受數據庫大小和磁盤I/O性能的影響。由于數據庫需要關閉才能進行冷備份&#xff0c;所以這種備份技術并不適用724小時的系統。盡管冷…