开头
好久没有去学习python的知识了,最近都忙着在玩unity3d,今天在整理自己的游戏素材时发现文件名要批量修改蛮烦的,windows自带的批量修改又带括号,看起来不太舒服,就自己试着写了一下用python做一个批量修改文件名的小工具。算是满足自己的需求了,之后有空了再多加一点功能吧。。。
效果图
用到的库
import tkinter as tk
from tkinter import filedialog # 读取文件夹路径
from tkinter import messagebox # 弹出窗口
import os # 系统
读取文件夹路径
def openFolderPath():
selectFolderPath = filedialog.askdirectory()
if(selectFolderPath != ''):
folderPath.set(selectFolderPath)
findAllFilesInTheFolder()
读取所选文件夹目录下的所有文件
def findAllFilesInTheFolder():
t_filesList = os.listdir(folderPath.get())
filesList.set(t_filesList)
t_folderNumber = 0 # 文件夹数量
t_fileNumber = 0 # 文件数量
for fileItem in t_filesList:
file = os.path.splitext(fileItem) # 将文件分割为前缀、后缀,文件夹无后缀
if(file[1] == ''):
t_folderNumber += 1
else:
t_fileNumber += 1
labelFilesInfor.config(text='当前目录下有' + str(t_fileNumber) + '个文件,' + str(t_folderNumber) + '个文件夹')
确认修改所选文件夹中的所有文件名
def startToRenameSelectedFiles():
if(setFileNameHead.get() != '' and folderPath.get() != ''):
tempIndex = 1 # 文件名后缀数字部分
t_path = folderPath.get()
t_filesList = os.listdir(t_path)
for fileItem in t_filesList:
file = os.path.splitext(fileItem)
if(file[1] != ''):
print('修改前:' + fileItem)
file_foot = file[1] # 保存后缀名
os.rename(t_path + '/' + fileItem,t_path + '/'+ setFileNameHead.get() + str(tempIndex) + file_foot)
print('修改后:' + setFileNameHead.get() + str(tempIndex) + file_foot)
tempIndex += 1
messagebox.showinfo(title=theToolName,message='修改文件名成功')
elif(setFileNameHead.get() == '' and folderPath.get() != ''):
messagebox.showerror(title=theToolName,message='请输入前缀名')
else:
messagebox.showerror(title=theToolName,message='请选择正确的文件夹路径')
打开所选择的文件夹
def openTheFolder():
os.system("start explorer "+(folderPath.get()).replace('/','\\'))
全部代码
import tkinter as tk
from tkinter import filedialog # 文件夹路径
from tkinter import messagebox # 弹出窗口
import os # 系统
# 方法
# 选择文件夹
def openFolderPath():
selectFolderPath = filedialog.askdirectory()
if(selectFolderPath != ''):
folderPath.set(selectFolderPath)
findAllFilesInTheFolder()
# 读取所选文件夹中所有文件
def findAllFilesInTheFolder():
t_filesList = os.listdir(folderPath.get())
filesList.set(t_filesList)
t_folderNumber = 0
t_fileNumber = 0
for fileItem in t_filesList:
file = os.path.splitext(fileItem)
if(file[1] == ''):
t_folderNumber += 1
else:
t_fileNumber += 1
labelFilesInfor.config(text='当前目录下有' + str(t_fileNumber) + '个文件,' + str(t_folderNumber) + '个文件夹')
# 确认修改所选文件夹中的所有文件名
def startToRenameSelectedFiles():
if(setFileNameHead.get() != '' and folderPath.get() != ''):
tempIndex = 1
t_path = folderPath.get()
t_filesList = os.listdir(t_path)
for fileItem in t_filesList:
file = os.path.splitext(fileItem)
if(file[1] != ''):
print('修改前:' + fileItem)
file_foot = file[1] # 保存后缀名
os.rename(t_path + '/' + fileItem,t_path + '/'+ setFileNameHead.get() + str(tempIndex) + file_foot)
print('修改后:' + setFileNameHead.get() + str(tempIndex) + file_foot)
tempIndex += 1
messagebox.showinfo(title=theToolName,message='修改文件名成功')
elif(setFileNameHead.get() == '' and folderPath.get() != ''):
messagebox.showerror(title=theToolName,message='请输入前缀名')
else:
messagebox.showerror(title=theToolName,message='请选择正确的文件夹路径')
# 打开所修改的文件夹路径
def openTheFolder():
os.system("start explorer "+(folderPath.get()).replace('/','\\'))
# 实例化窗口
window = tk.Tk()
# 窗口起名
theToolName = '天羊-批量修改文件名v0.1'
window.title(theToolName)
# 设置窗口大小
window.geometry('600x300')
window.resizable(width=False, height=False) # 禁止拉伸窗口
# 设置变量
folderPath = tk.StringVar() # 文件夹路径
filesList = tk.StringVar() # 文件夹路径下所有的文件
setFileNameHead = tk.StringVar() # 修改格式中文件名前缀
setFileNameFoot = tk.StringVar() # 修改格式中文件名后缀
# 标签设置
labelPath = tk.Label(window,text='请选择想要修改文件名的文件所处路径',font=('Arial',12),width=0,height=1)
labelPath.place(x=20,y=10)
labelFiles = tk.Label(window,text='当前路径下的文件列表',font=('Arial',12),width=0,height=1)
labelFiles.place(x=20,y=80)
labelSetting = tk.Label(window,text='请设置修改的格式',font=('Arial',12),width=0,height=1)
labelSetting.place(x=400,y=10)
labelSetting = tk.Label(window,text='文件名前缀',font=('Arial',10),width=0,height=1)
labelSetting.place(x=400,y=40)
labelSetting = tk.Label(window,text='文件名后缀',font=('Arial',10),width=0,height=1)
labelSetting.place(x=400,y=80)
labelFilesInfor = tk.Label(window,text='当前目录下有0个文件,0个文件夹',font=('Arial',12),width=0,height=1)
labelFilesInfor.place(x=20,y=250)
# 文本输入
insertPath = tk.Entry(window,textvariable=folderPath,width=30,state='readonly')
insertPath.place(x=20,y=40) # 所选择的文件夹路径
insertSetHead = tk.Entry(window,textvariable=setFileNameHead,width=20)
insertSetHead.place(x=400,y=60) # 修改格式中文件名前缀
# 选项设置
setFileFoot2 = tk.Radiobutton(window,text='1(1,2,3...)',variable=setFileNameFoot,value=1)
setFileFoot2.place(x=400,y=100)
# 按钮设置
buttonInsertPath = tk.Button(window,text='选择路径',font=('Arial',12),width=10,height=1,command=openFolderPath)
buttonInsertPath.place(x=250,y=40) # 选择文件夹按钮
buttonStartRename = tk.Button(window,text='确认修改',font=('Arial',12),width=10,height=1,command=startToRenameSelectedFiles)
buttonStartRename.place(x=450,y=250) # 确认修改按钮
# 文件列表设置
filesListBox = tk.Listbox(window,listvariable=filesList,width=40,height=7)
filesListBox.place(x=20,y=100)
# 测试按钮
insertPathButton = tk.Button(window,text='打开文件夹',font=('Arial',12),width=10,height=1,command=openTheFolder)
insertPathButton.place(x=330,y=250)
# 主窗口循环显示
window.mainloop()
结尾
主要代码就这些了,在家里实在是太无聊了!!!继续搞unity去了。。。
也希望中国这次的疫情能够早日结束,武汉加油,中国加油!!!
大家也尽量要少出门,在家里敲敲代码,挺好的。。。