Python腳本實現(xiàn)圖片文件批量命名
前言
本文介紹一個用python第三方庫pillow寫的批量處理圖片命名的腳本,以及腳本對應的使用tkinter庫寫的GUI界面并把它打包成exe可執(zhí)行文件,打包成可執(zhí)行文件的好處就是它支持多種操作系統(tǒng),如 Windows、Linux 和 Mac OS 等。
源碼
批量處理圖片尺寸腳本源碼
import os # 文件管理模塊 import shutil # 文件復制模塊 # 定義圖片文件批量重命名函數 def rename_files(old_path, new_path,prefix,ext=['jpg','png','jpeg','gif','bmp','tif','tiff']): # 判斷新文件夾是否存在,不存在則創(chuàng)建 if not os.path.exists(new_path): os.makedirs(new_path) # 原文件夾所有的文件 old_file_list = os.listdir(old_path) # 遍歷所有的文件 for num,file_name in enumerate(old_file_list): # 跳過非圖片文件 去掉下面兩行判斷條件,則會把所有文件都重命名 if os.path.splitext(file_name)[1][1:] not in ext: # 獲取文件擴展名 continue # 重命名文件 new_file_name = f"{prefix}_{str(num)}{os.path.splitext(file_name)[1]}" # 構建舊文件和新文件的完整路徑 old_file_path = os.path.join(old_path, file_name) new_file_path = os.path.join(new_path, new_file_name) # 移動文件 shutil.copy(old_file_path, new_file_path) print(f"{file_name} -> {new_file_name}") ### 下面調用函數并傳入參數選擇路徑和文件名前綴 # 源文件夾路徑 old_path = 'new_images' # 新文件夾路徑 new_path = 'im2' # 文件名前綴 prefix = 'heihei' # 調用批量重命名函數 rename_files(old_path, new_path, prefix)
效果
GUI界面源碼
import os # 文件管理模塊 import shutil # 文件復制模塊 from tkinter import filedialog,messagebox,Label,Entry # 消息框模塊,文件選擇對話框模塊,標簽模塊,輸入框模塊 import tkinter as tk # GUI模塊 # 定義圖片文件批量重命名函數 def rename_files(old_path, new_path,prefix,ext=['jpg','png','jpeg','gif','bmp','tif','tiff']): # 判斷新文件夾是否存在,不存在則創(chuàng)建 if not os.path.exists(new_path): os.makedirs(new_path) # 原文件夾所有的文件 old_file_list = os.listdir(old_path) # 遍歷所有的文件 for num,file_name in enumerate(old_file_list): # 跳過非圖片文件 去掉下面兩行判斷條件,則會把所有文件都重命名 if os.path.splitext(file_name)[1][1:] not in ext: # 獲取文件擴展名 continue # 重命名文件 new_file_name = f"{prefix}_{str(num)}{os.path.splitext(file_name)[1]}" # 構建舊文件和新文件的完整路徑 old_file_path = os.path.join(old_path, file_name) new_file_path = os.path.join(new_path, new_file_name) # 移動文件 shutil.copy(old_file_path, new_file_path) print(f"{file_name} -> {new_file_name}") def rename_images_gui(): # 彈出對話框讓用戶選擇文件夾 old_path = filedialog.askdirectory() if not old_path: return new_path = filedialog.askdirectory(title="選擇新文件夾") if not new_path: return # 獲取輸入框中的值 prefix = entry_prefix.get() if not prefix: messagebox.showerror("提示", "請輸入文件名前綴") return # 如果沒有前綴,返回 rename_files(old_path, new_path, prefix) messagebox.showinfo("提示", "批量重命名完成") def on_rename_button_click(): # 獲取輸入框中的值 old_path = entry_old_path.get() new_path = entry_new_path.get() try: # 獲取將輸入框中的值 prefix = entry_prefix.get() except ValueError: # 如果輸入框中的值不符合格式要求,則彈出錯誤提示框并返回 messagebox.showerror("提示", "輸入格式不符合要求") return # 檢查輸入框中的路徑是否有效 if not os.path.isdir(old_path): # 如果輸入框中的路徑不是有效目錄,則彈出錯誤提示框并返回 messagebox.showerror("提示", "路徑無效") return # 調用圖片調整函數 rename_files(old_path, new_path, prefix) # 彈出成功提示框 messagebox.showinfo("Success", "圖片批量命名成功") # 創(chuàng)建主窗口 root = tk.Tk() # 設置窗口標題 root.title("圖片批量命名工具") # 創(chuàng)建并放置標簽和輸入框 tk.Label(root, text="儲存原圖片的文件夾:").grid(row=0, column=0, padx=10, pady=10) # 創(chuàng)建輸入框并放置 entry_old_path = tk.Entry(root, width=50) # 設置輸入框的位置 entry_old_path.grid(row=0, column=1, padx=10, pady=10) # 設置按鈕點擊事件,選擇文件夾并將路徑插入輸入框,如果輸入框已有內容,則先清空,再插入,否則直接插入,使用lambda表達式簡化代碼, tk.Button(root, text="瀏覽", command=lambda: entry_old_path.delete(0, tk.END) or entry_old_path.insert(0, filedialog.askdirectory())).grid( row=0, column=2, padx=10, pady=10) # 創(chuàng)建并放置標簽和輸入框 tk.Label(root, text="儲存新圖片的文件夾:").grid(row=1, column=0, padx=10, pady=10) # 創(chuàng)建輸入框并放置 entry_new_path = tk.Entry(root, width=50) # 設置輸入框的位置 entry_new_path.grid(row=1, column=1, padx=10, pady=10) # 設置按鈕點擊事件,選擇文件夾并將路徑插入輸入框,如果輸入框已有內容,則先清空,再插入,否則直接插入,使用lambda表達式簡化代碼, tk.Button(root, text="瀏覽", command=lambda: entry_new_path.delete(0, tk.END) or entry_new_path.insert(0, filedialog.askdirectory())).grid( row=1, column=2, padx=10, pady=10) # 創(chuàng)建并放置標簽和輸入框 tk.Label(root, text="文件前綴").grid(row=3, column=0, padx=10, pady=10) # 創(chuàng)建輸入框并放置 entry_prefix = tk.Entry(root, width=10) # 設置輸入框的位置 entry_prefix.grid(row=3, column=1, padx=10, pady=10) # 創(chuàng)建并放置調整尺寸按鈕 rename_button = tk.Button(root, text="運行", command=on_rename_button_click) # 設置按鈕的位置 rename_button.grid(row=4, column=0, columnspan=3, pady=20) # 運行主循環(huán) root.mainloop()
效果
打包成.exe可執(zhí)行文件
需要安裝python第三方庫pyinstaller
pip install pyinstaller
在文件所在目錄的終端輸入下面的命令,就可以把把剛剛的GUI界面打包成一個.exe可執(zhí)行文件。
pyinsataller filename
filename是要打包的源文件的名稱 比如我要打包我寫的圖片批量命名的腳本打包成.exe可執(zhí)行文件,可以在終端使用下面的命令:
pyinstaller study_2.py
效果
.exe可執(zhí)行文件運行出來的結果和GUI界面是一致的
到此這篇關于Python腳本實現(xiàn)圖片文件批量命名的文章就介紹到這了,更多相關Python圖片批量命名內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python實現(xiàn)Socket.IO的在線游戲場景方式
本文介紹了Socket.IO的基本概念、應用場景,并通過一個簡單的多人在線實時對戰(zhàn)游戲案例,展示了如何使用Python和Socket.IO庫實現(xiàn)實時通信,Socket.IO的核心是事件驅動模型,支持WebSocket協(xié)議,并在不支持的情況下回退到其他傳輸方式2025-01-01解決使用pip安裝報錯:Microsoft?Visual?C++?14.0?is?required.
對于程序員來說,經常pip安裝自己所需要的包,大部分的包基本都能安裝,但是總會遇到包安裝不了的問題,下面這篇文章主要給大家介紹了關于如何解決使用pip安裝報錯:Microsoft?Visual?C++?14.0?is?required.的相關資料,需要的朋友可以參考下2022-09-09LyScript實現(xiàn)內存交換與差異對比的方法詳解
LyScript?針對內存讀寫函數的封裝功能并不多,只提供了內存讀取和內存寫入函數的封裝,本篇文章將繼續(xù)對API進行封裝,實現(xiàn)一些在軟件逆向分析中非常實用的功能,需要的可以參考一下2022-08-08Tensorflow tf.dynamic_partition矩陣拆分示例(Python3)
今天小編就為大家分享一篇Tensorflow tf.dynamic_partition矩陣拆分示例(Python3) ,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02pytorch之torchvision.transforms圖像變換實例
今天小編就為大家分享一篇pytorch之torchvision.transforms圖像變換實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12