網站首頁 編程語言 正文
用Python編寫過批量修改文件名的腳本程序,代碼很簡單,運行也比較快,唯一美中不足之處是每次批量修改文件名時都需要執行以下步驟:
- 1)復制文件夾路徑;
- 2)打開腳本程序
- 3)替換腳本中的文件夾路徑
- 4)保存腳本程序
- 5)執行腳本程序
為了便于操作,最好還是弄成GUI界面,手動選擇文件夾,這樣程序也更通用。Python中的GUI庫很多,絕大部分都支持跨平臺,其中安裝python時自帶的GUI庫是tkinter,本文就學習并創建基于tkinte的批量修改文件名程序。
本文涉及的知識點包括以下幾個:
- 1)使用tkinter.Tk創建窗口,并且調用geometry函數設置窗口的寬和高,需要注意的是geometry函數接收的是字符串,寬度x高度,中間的乘號其實是小寫的x,用數學符號或者是大寫的X會報錯;
- 2)布局方式:根據參考文獻1,tkinter有pack、grid、place三種布局方式,本文采購grid布局方式,該方式有點類似Winfom中的TableLayoutPanel,不同之處在于不用提前設置好行數和列數,只需指定所用控件的行號和列號即可;
- 3)控件,主要使用了標簽(tkinter.Label)、文本(tkinter.Entry)、按鈕(tkinter.Button)控件,tkinte通過變量綁定的方式獲取或更新文本控件的值。
- 4)瀏覽文件夾,根據參考文獻2,調用tkinter.filedialog中的askdirectory()選擇文件夾。
全部代碼如下所示:
# coding=gbk
import tkinter as tk
import os
from tkinter.filedialog import askdirectory
def BrowseDri():
txtDirPath.set(askdirectory())
def BatchReplaceFileName():
path = txtDirPath.get()
strSign=txtRemovedContent.get()
files=os.listdir(path)
for onefile in files:
if onefile.find(strSign)<0:
continue
oldname=path+"\\"+onefile
newname=path+"\\"+onefile.replace(strSign,"")
os.rename(oldname,newname)
print(oldname,"====>",newname)
window=tk.Tk()
window.title('批量處理文件名')
window.geometry('600x400')
tk.Label(window,text='選擇文件夾').grid(row=0,column=0)
txtDirPath=tk.StringVar()
tk.Entry(window,textvariable=txtDirPath).grid(row=0,column=1)
tk.Button(window,text='瀏覽',command=BrowseDri).grid(row=0,column=2)
tk.Label(window,text='輸入要移除的內容:').grid(row=1,column=0)
txtRemovedContent=tk.StringVar()
tk.Entry(window,textvariable=txtRemovedContent).grid(row=1,column=1)
tk.Button(window,text='移除',command=BatchReplaceFileName).grid(row=1,column=2)
tk.mainloop()
最后是程序運行效果,如下面幾張截圖所示:運行程序后,首先選擇要批量處理的文件夾,然后設置文件名中要移除的內容,最后點擊移除按鈕批量處理文件名。
上文主要實現了批量移除文件名中的指定字符串,無法進行替換,本文在前面工作的基礎上,增加批量替換文件名中指定字符串的功能。
新增的功能點不多,主要包括:
- 單選框控件:使用tkinter.Radiobutton函數創建單選框控件,并用value屬性設置單選框對應的值,也即選中單選框時得到的值,提前定義好變量(本文中定義了Int變量),創建單選框控件時用variable屬性綁定變量。如果要設置默認選中的單選框,則直接設置變量值為指定單選框對應的value值即可;
- 設置文本框的默認狀態:文本框使用state屬性設置文本框的可用狀態,包括normal/disabled,可以在創建Entry時指定文檔框的state屬性為disabled,則文本框默認不可用;
- 修改控件屬性:除了在創建控件時指定屬性值之外,在程序運行過程中修改控件屬性有多種方式(詳見參考文獻5),本文采用通過字典鍵設置屬性方式動態修改文本框的可用狀態。
批量修改文件名程序的完整代碼如所示:
# coding=gbk
import tkinter as tk
import os
from tkinter.filedialog import askdirectory
def BrowseDri():
txtDirPath.set(askdirectory())
def SetControlStatus():
mode=processMode.get()
if(mode==1):
txtRemoved['state'] = 'normal'
txtBeforeReplaced['state'] = 'disabled'
txtAfterReplaced['state'] = 'disabled'
btnProcess['text']='移除'
elif mode==2:
txtRemoved['state'] = 'disabled'
txtBeforeReplaced['state'] = "normal"
txtAfterReplaced['state'] = 'normal'
btnProcess['text']='替換'
def BatchReplaceFileName():
path = txtDirPath.get()
mode=processMode.get()
if(mode==1):
strOldSign=txtRemovedContent.get()
strNewSign=""
elif mode==2:
strOldSign=txtBeforeReplactContent.get()
strNewSign=txtAfterReplactContent.get()
files=os.listdir(path)
for onefile in files:
if onefile.find(strOldSign)<0:
continue
oldname=path+"\\"+onefile
newname=path+"\\"+onefile.replace(strOldSign,strNewSign)
os.rename(oldname,newname)
print(oldname,"====>",newname)
window=tk.Tk()
window.title('批量處理文件名')
window.geometry('400x300')
tk.Label(window,text='選擇文件夾').grid(row=0,column=0)
txtDirPath=tk.StringVar()
tk.Entry(window,textvariable=txtDirPath).grid(row=0,column=1)
tk.Button(window,text='瀏覽',command=BrowseDri).grid(row=0,column=2)
processMode =tk.IntVar()
tk.Radiobutton(window, text="移除內容", variable=processMode, value=1, command=SetControlStatus).grid(row=1,column=0)
tk.Label(window,text='輸入要移除的內容:').grid(row=1,column=1)
txtRemovedContent=tk.StringVar()
txtRemoved=tk.Entry(window,textvariable=txtRemovedContent)
txtRemoved.grid(row=1,column=2)
tk.Radiobutton(window, text="替換內容", variable=processMode, value=2, command=SetControlStatus).grid(row=2,column=0)
tk.Label(window,text='輸入替換前的內容:').grid(row=2,column=1)
txtBeforeReplactContent=tk.StringVar()
txtBeforeReplaced=tk.Entry(window,textvariable=txtBeforeReplactContent,state='disabled')
txtBeforeReplaced.grid(row=2,column=2)
tk.Label(window,text='輸入替換后的內容:').grid(row=3,column=1)
txtAfterReplactContent=tk.StringVar()
txtAfterReplaced=tk.Entry(window,textvariable=txtAfterReplactContent,state='disabled')
txtAfterReplaced.grid(row=3,column=2)
processMode.set(1)
btnProcess=tk.Button(window,text='移除',command=BatchReplaceFileName)
btnProcess.grid(row=4,column=0)
tk.mainloop()
最后是程序效果,如下圖所示,選擇指定文件夾,首先將文件夾中所有文件中的car字符串替換為che@,接著再移除文件名中的@字符。
原文鏈接:https://blog.csdn.net/gc_2299/article/details/126443393
相關推薦
- 2022-07-02 element-ui及時清除驗證規則
- 2022-12-12 用C語言如何打印一個等腰三角形_C 語言
- 2022-06-07 Jenkins?腳本命令行應用小結_相關技巧
- 2021-07-18 vscode sftp no such file 解決辦法
- 2022-10-18 linux下shell腳本備份文件的方法實現_linux shell
- 2022-04-19 運行 npm run xxx 的時候都執行了些什么
- 2023-03-16 ProxyWidget和Element更新的正確方式詳解_Android
- 2022-07-23 詳解NumPy中的線性關系與數據修剪壓縮_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支