python批量化修改文件名字(带窗口,可调整设置)

这是一个Python实现的批量文件命名工具,具备在文件名后添加数字排序、前缀、后缀,以及删除特定文字的功能。用户可以选择文件夹,设置修改选项,程序会自动修改文件名并记录,便于错误时返回原名。同时提供返回和退出功能,操作简便,可自定义设置界面风格。
摘要由CSDN通过智能技术生成

python批量化修改文件名字(带窗口,可调整设置)

功能描述

主要有以下几个
1、直接修改文件名字,并在名字后面添加数字进行排序。
2、在文件名字前面增加前缀.
3、在文件名字后面增加后缀.不改变格式
4、批量删除文件名字中的特定文字.

注意事项

1、点击运行后,修改的是该文件夹下的所有文件(不包含文件夹)。
2、如果修改名字错误,可以点击返回,即可实现修改名字一件改回原名字,但是要注意只能返回上一次的名字,不能返回上上次的或更多的,使用中请注意.
3、简单修改源码中的设置,就可以使其更加符合自己的审美观.

效果图

图片: 界面图

源代码

"""引用模块"""
import tkinter as tk
from tkinter import Label, filedialog
import os
from tkinter.constants import ANCHOR, CENTER, RIGHT, TRUE
import  time
"""参数设置"""
path="D://mkdir"#临时文件存放点
width=500  #设置窗口宽度
height=300 #设置窗口高度
win_center=True  #是否设置窗口自动居中,True  代表是,False 代表否  ,如果设置窗口居中x_,y_参数将不起作用
x_=0    #如果没有设置自动窗口居中,该参数为必须项,窗口开始的x坐标
y_=0    #如果没有设置自动窗口居中,该参数为必须项,窗口开始的y坐标
name="批量命名"  #窗口名字

win_bg="#f2eada"   #窗口背景
label_fg='#130c0e' #标签上的字体颜色

button_bg="#00FFFF" #按钮背景颜色
button_fg='#130c0e'#按钮上的字体颜色

entry_bg="#F8F8FF"    #输入框显示字体颜色
entry_fg='#BA55D3'  #输入框背景颜色
ico="" #设置窗口图标,空代表无


"""自定义函数"""
def write(path,word_) :#将word 写入path路径下
    try :
        with open(path+"//"+'dir.txt','a',encoding='utf-8-sig') as f :
            f.write(str(word_))
    except :
        os.makedirs(path)
        write(path,word_) 
def choosedir() :  #选择文件夹函数
    dir = filedialog.askdirectory()   #获取目标文件夹路径
    text.set(dir)  #数值传递
def change() :#修改path路径下的文件名字,num表示选项
    n=1   #计数器
    file_dir=text.get()
    alist=os.listdir(file_dir)  #获取选择的文件夹路径下的文件列表
    clist=[]  #存放修改记录
    dlist=[]  #存放修改失败记录
    change_word=str(word.get())#获取修改词
    if str(choose.get())=='0':
        for i in alist :
            if os.path.isfile(os.path.join(file_dir,i)) :   #判断是否是文件
                try :
                    blist=os.path.splitext(i)               #文件名字与格式
                    old_name=os.path.join(file_dir,i) 
                    new_name=os.path.join(file_dir,change_word+str(n)+blist[1])
                    os.rename(old_name,new_name)  #更换名字
                    clist.append([old_name,new_name])
                    n+=1
                except :
                    dlist.append(i)
        return clist,dlist
    if str(choose.get())=='1':
        for i in alist :
            if os.path.isfile(os.path.join(file_dir,i)) :
                try :
                    blist=os.path.splitext(i)
                    old_name=os.path.join(file_dir,i) 
                    new_name=os.path.join(file_dir,blist[0]+change_word+blist[1])
                    os.rename(old_name,new_name)
                    clist.append([old_name,new_name])
                except :
                    dlist.append(i)
        return clist,dlist
    if str(choose.get())=='2':
        for i in alist :
            if os.path.isfile(os.path.join(file_dir,i)) : #判断是否是文件
                try :
                    blist=os.path.splitext(i)   
                    old_name=os.path.join(file_dir,i) 
                    new_name=os.path.join(file_dir,change_word+i)
                    os.rename(old_name,new_name)
                    clist.append([old_name,new_name])
                except :
                    dlist.append(i)
        return clist,dlist
    if str(choose.get())=='3':
        for i in alist :
            if os.path.isfile(os.path.join(file_dir,i)) :
                try:
                    blist=os.path.splitext(i)
                    old_name=os.path.join(file_dir,i) 
                    if change_word in blist[0] :  #判断关键词是否在文件名字中
                        new=str(blist[0]).replace(change_word,"")
                    new_name=os.path.join(file_dir,new+blist[1])#拼接出新名字
                    os.rename(old_name,new_name)
                    clist.append([old_name,new_name])
                except :
                    dlist.append(i)
        return clist,dlist
def run() :  #程序运行
    mk_dir=path+'\\'+"filename.txt"
    start_time=time.time()
    elist=0
    elist,blist=change()
    for i in elist :
        try :
            with open (mk_dir,'a',encoding='utf-8-sig') as f :
                f.write(str(i[0])+'#'+str(i[1])+'\n')
        except :
            os.mkdir(path)
            with open (mk_dir,'a',encoding='utf-8-sig') as f :
                f.write(str(i[0])+'#'+str(i[1])+'\n') #将变化的名字写入文件中,方便返回时候调用
    if len(blist) != 0 :#判断有没有出错的文件  
            end_time=time.time()
            message.set("一共有{}个文件成功,{}个文件修改失败,共耗时{}秒".format(len(elist),len(blist),int((end_time-start_time)*100)/100))
    else :
            end_time=time.time()
            message.set("{}个文件全部修改成功,0失败,共耗时{}秒".format(len(elist),int((end_time-start_time)*100)/100))
def exit_() : #程序退出
    try :
        os.remove(path+'\\'+"filename.txt")  #返回成功后删除存档
        os.rmdir(path)  #返回成功后删除存档
    except :
        message.set("文件删除失败")
        time.sleep(1)
    finally :
        exit()

def return_() :
    try :
        start_time=time.time()
        with open(path+'\\'+"filename.txt",'r',encoding='utf-8-sig') as f :
            alist=f.readlines()
        for i in alist :
            blist=str(i).split("#")
            old_name=blist[0]
            new_name=blist[1][:-1]
            os.rename(new_name,old_name)     
        end_time=time.time() 
        message.set("返回成功,共耗时{}秒".format(int((end_time-start_time)*100)/100))
        os.remove(path+'\\'+"filename.txt")  #返回成功后删除存档
    except Exception as e:
        message.set("返回失败,{}".format(e))
    

"""程序书写"""
root = tk.Tk() #生成一个主窗口对象
root.resizable(width=True,height=True) 
root.attributes('-topmost', -1)  #窗口置于最顶层
alignstr='{}x{}+{}+{}'.format(width,height,x_,y_)
if win_center :
    screenwidth = root.winfo_screenwidth()
    screenheight = root.winfo_screenheight()
    alignstr = '%dx%d+%d+%d' % (width, height, (screenwidth-width)/2, (screenheight-height)/2)
else :
    alignstr='{}x{}+{}+{}'.format(width,height,x_,y_)
root.geometry(alignstr)
root.title(name)
root['bg'] = win_bg  #设置背景颜色
try :#测试是否设置图标路径
    root.iconbitmap(ico)
except :
    pass
"""设置传递数值的变量"""
text=tk.StringVar()  #选取文件夹信息传递
text.set("")#赋值
choose = tk.StringVar() #选择功能的选项传递
choose.set(0)#赋值
word=tk.StringVar() #输入的字符串传递
word.set("")#赋值
message=tk.StringVar()#传递程序运行中的信息
message.set("")
"""创建标签/按钮等功能"""
tk.Label(root, #创建标签1
        anchor = tk.E, #设置标签文本的位置
        bg = win_bg, #设置标签的背景色
        fg =label_fg, #设置标签的前景色.文字颜色
        text = "请选择文件夹", #设置标签中显示的文本
        width =10, #设置标签的宽度
        justify=tk.LEFT,
        height = 1).place(x=0,y=30) #设置标签的高度
tk.Entry( root,
        textvariable = text,  #默认文字为空
        bg=entry_bg,
        fg=entry_fg,
        width=40,
        justify=tk.LEFT,
        ).place(x=100,y=30)
tk.Button(root, #创建标签1
        anchor = tk.E, #设置标签文本的位置
        bg = button_bg, #设置标签的背景色
        fg = button_fg, #设置标签的前景色
        text = '选择文件夹', #设置标签中显示的文本
        justify=tk.CENTER,
        width =9, #设置标签的宽度
        command=choosedir,
        takefocus=TRUE,
        height = 1).place(x=400,y=30) #设置标签的高度

alist=['修改文件名字','尾端添加汉字',"前端添加汉字",'删除特定字符']#设置选项
tk.Radiobutton(root, #创建单选按钮1
                variable = choose, #设置选中单选按钮时的变量值
                value = 0, 
                bg=button_bg,
                fg=button_fg,
                indicatoron=0,
                text = alist[0]).place(x=0,y=70) #设置单选按钮的显示文本
tk.Radiobutton(root, #创建单选按钮1
                variable = choose, #设置选中单选按钮时的变量值
                value = 1, 
                bg=button_bg,
                fg=button_fg,
                indicatoron=0,
                text = alist[1]).place(x=0,y=100) #设置单选按钮的显示文本
tk.Radiobutton(root, #创建单选按钮1
                variable = choose, #设置选中单选按钮时的变量值
                value = 2, 
                bg=button_bg,
                fg=button_fg,
                indicatoron=0,
                text = alist[2]).place(x=0,y=130) #设置单选按钮的显示文本
tk.Radiobutton(root, #创建单选按钮1
                variable = choose, #设置选中单选按钮时的变量值
                value = 3, 
                bg=button_bg,
                fg=button_fg,
                indicatoron=0,
                text = alist[3]).place(x=0,y=160) #设置单选按钮的显示文本
tk.Button(root, #创建标签1
        bg=button_bg,
        fg=button_fg,
        text = '运行', #设置标签中显示的文本
        justify=tk.CENTER,
        width =9, #设置标签的宽度
        command=run,
        takefocus=TRUE,
        height = 1).place(x=200,y=260) #设置标签的高度

tk.Button(root, #创建标签1
        bg=button_bg,
        fg=button_fg,
        text = '返回', #设置标签中显示的文本
        justify=tk.CENTER,
        width =9, #设置标签的宽度
        command=return_,
        takefocus=TRUE,
        height = 1).place(x=0,y=260) #设置标签的高度
tk.Button(root, #创建标签1
                bg=button_bg,
                fg=button_fg,
        text = '退出', #设置标签中显示的文本
        justify=tk.CENTER,
        width =9, #设置标签的宽度
        command=exit_,
        takefocus=TRUE,
        height = 1).place(x=400,y=260) #设置标签的高度

tk.Label(root, #创建标签1
        anchor = tk.NW, #设置标签文本的位置
        bg = win_bg, #设置标签的背景色
        fg = label_fg, #设置标签的前景色
        textvariable= message, #设置标签中显示的文本
        width =100, #设置标签的宽度
        justify=tk.LEFT,
        height = 6).place(x=120,y=70) #设置标签的高度
tk.Label(root, #创建标签1
        anchor = tk.E, #设置标签文本的位置
        bg = win_bg, #设置标签的背景色
        fg = label_fg, #设置标签的前景色.文字颜色
        text = "请输入字符", #设置标签中显示的文本
        width =10, #设置标签的宽度
        justify=tk.LEFT,
        height = 1).place(x=0,y=200) #设置标签的高度
tk.Entry( root,
        text = word,  #默认文字为空
        bg=entry_bg,
        fg=entry_fg,
        width=40,
        justify=tk.LEFT,
        ).place(x=100,y=200)
root.mainloop() #进入消息循环
exit_()
'''
#FFB6C1 LightPink 浅粉红
#FFC0CB Pink 粉红
#DC143C Crimson 深红/猩红
#FFF0F5 LavenderBlush 淡紫红
#DB7093 PaleVioletRed 弱紫罗兰红
#FF69B4 HotPink 热情的粉红
#FF1493 DeepPink 深粉红
#C71585 MediumVioletRed 中紫罗兰红
#DA70D6 Orchid 暗紫色/兰花紫
#D8BFD8 Thistle 蓟色
#DDA0DD Plum 洋李色/李子紫
#EE82EE Violet 紫罗兰
#FF00FF Magenta 洋红/玫瑰红
#FF00FF Fuchsia 紫红/灯笼海棠
#8B008B DarkMagenta 深洋红
#800080 Purple 紫色
#BA55D3 MediumOrchid 中兰花紫
#9400D3 DarkViolet 暗紫罗兰
#9932CC DarkOrchid 暗兰花紫
#4B0082 Indigo 靛青/紫兰色
#8A2BE2 BlueViolet 蓝紫罗兰
#9370DB MediumPurple 中紫色
#7B68EE MediumSlateBlue 中暗蓝色/中板岩蓝
#6A5ACD SlateBlue 石蓝色/板岩蓝
#483D8B DarkSlateBlue 暗灰蓝色/暗板岩蓝
#E6E6FA Lavender 淡紫色/熏衣草淡紫
#F8F8FF GhostWhite 幽灵白
#0000FF Blue 纯蓝
#0000CD MediumBlue 中蓝色
#191970 MidnightBlue 午夜蓝
#00008B DarkBlue 暗蓝色
#000080 Navy 海军蓝
#4169E1 RoyalBlue 皇家蓝/宝蓝
#6495ED CornflowerBlue 矢车菊蓝
#B0C4DE LightSteelBlue 亮钢蓝
#778899 LightSlateGray 亮蓝灰/亮石板灰
#708090 SlateGray 灰石色/石板灰
#1E90FF DodgerBlue 闪兰色/道奇蓝
#F0F8FF AliceBlue 爱丽丝蓝
#4682B4 SteelBlue 钢蓝/铁青
#87CEFA LightSkyBlue 亮天蓝色
#87CEEB SkyBlue 天蓝色
#00BFFF DeepSkyBlue 深天蓝
#ADD8E6 LightBlue 亮蓝
#B0E0E6 PowderBlue 粉蓝色/火药青
#5F9EA0 CadetBlue 军兰色/军服蓝
#F0FFFF Azure 蔚蓝色
#E0FFFF LightCyan 淡青色
#AFEEEE PaleTurquoise 弱绿宝石
#00FFFF Cyan 青色
#00FFFF Aqua 浅绿色/水色
#00CED1 DarkTurquoise 暗绿宝石
#2F4F4F DarkSlateGray 暗瓦灰色/暗石板灰
#008B8B DarkCyan 暗青色
#008080 Teal 水鸭色
#48D1CC MediumTurquoise 中绿宝石
#20B2AA LightSeaGreen 浅海洋绿
#40E0D0 Turquoise 绿宝石
#7FFFD4 Aquamarine 宝石碧绿
#66CDAA MediumAquamarine 中宝石碧绿
#00FA9A MediumSpringGreen 中春绿色
#F5FFFA MintCream 薄荷奶油
#00FF7F SpringGreen 春绿色
#3CB371 MediumSeaGreen 中海洋绿
#2E8B57 SeaGreen 海洋绿
#F0FFF0 Honeydew 蜜色/蜜瓜色
#90EE90 LightGreen 淡绿色
#98FB98 PaleGreen 弱绿色
#8FBC8F DarkSeaGreen 暗海洋绿
#32CD32 LimeGreen 闪光深绿
#00FF00 Lime 闪光绿
#228B22 ForestGreen 森林绿
#008000 Green 纯绿
#006400 DarkGreen 暗绿色
#7FFF00 Chartreuse 黄绿色/查特酒绿
#7CFC00 LawnGreen 草绿色/草坪绿
#ADFF2F GreenYellow 绿黄色
#556B2F DarkOliveGreen 暗橄榄绿
#9ACD32 YellowGreen 黄绿色
#6B8E23 OliveDrab 橄榄褐色
#F5F5DC Beige 米色/灰棕色
#FAFAD2 LightGoldenrodYellow 亮菊黄
#FFFFF0 Ivory 象牙色
#FFFFE0 LightYellow 浅黄色
#FFFF00 Yellow 纯黄
#808000 Olive 橄榄
#BDB76B DarkKhaki 暗黄褐色/深卡叽布
#FFFACD LemonChiffon 柠檬绸
#EEE8AA PaleGoldenrod 灰菊黄/苍麒麟色
#F0E68C Khaki 黄褐色/卡叽布
#FFD700 Gold 金色
#FFF8DC Cornsilk 玉米丝色
#DAA520 Goldenrod 金菊黄
#B8860B DarkGoldenrod 暗金菊黄
#FFFAF0 FloralWhite 花的白色
#FDF5E6 OldLace 老花色/旧蕾丝
#F5DEB3 Wheat 浅黄色/小麦色
#FFE4B5 Moccasin 鹿皮色/鹿皮靴
#FFA500 Orange 橙色
#FFEFD5 PapayaWhip 番木色/番木瓜
#FFEBCD BlanchedAlmond 白杏色
#FFDEAD NavajoWhite 纳瓦白/土著白
#FAEBD7 AntiqueWhite 古董白
#D2B48C Tan 茶色
#DEB887 BurlyWood 硬木色
#FFE4C4 Bisque 陶坯黄
#FF8C00 DarkOrange 深橙色
#FAF0E6 Linen 亚麻布
#CD853F Peru 秘鲁色
#FFDAB9 PeachPuff 桃肉色
#F4A460 SandyBrown 沙棕色
#D2691E Chocolate 巧克力色
#8B4513 SaddleBrown 重褐色/马鞍棕色
#FFF5EE Seashell 海贝壳
#A0522D Sienna 黄土赭色
#FFA07A LightSalmon 浅鲑鱼肉色
#FF7F50 Coral 珊瑚
#FF4500 OrangeRed 橙红色
#E9967A DarkSalmon 深鲜肉/鲑鱼色
#FF6347 Tomato 番茄红
#FFE4E1 MistyRose 浅玫瑰色/薄雾玫瑰
#FA8072 Salmon 鲜肉/鲑鱼色
#FFFAFA Snow 雪白色
#F08080 LightCoral 淡珊瑚色
#BC8F8F RosyBrown 玫瑰棕色
#CD5C5C IndianRed 印度红
#FF0000 Red 纯红
#A52A2A Brown 棕色
#B22222 FireBrick 火砖色/耐火砖
#8B0000 DarkRed 深红色
#800000 Maroon 栗色
#FFFFFF White 纯白
#F5F5F5 WhiteSmoke 白烟
#DCDCDC Gainsboro 淡灰色
#D3D3D3 LightGrey 浅灰色
#C0C0C0 Silver 银灰色
#A9A9A9 DarkGray 深灰色
#808080 Gray 灰色
#696969 DimGray 暗淡灰
#000000 Black 纯黑
'''

如果需要成品的EXE文件请点击下方链接下载,源码也在里面。
链接: 批量修改文件名字软件下载.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值