【python小工具】批量修改所选文件夹中所有文件的名称

开头

好久没有去学习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去了。。。
也希望中国这次的疫情能够早日结束,武汉加油,中国加油!!!
大家也尽量要少出门,在家里敲敲代码,挺好的。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值