creo保存文件如a001.prt.1,a001.prt.2,a003.drw.3.,b001.asm.3,b001.asm.4等在文件后面带数字,表示不同版本,可以使用软件自带purge命令清除保留最新版本(同名文件数字最大)
1.prt,asm,drw文件保留最后的版本
2.部分特定文件清除
下面的代码运行可以实现目标功能,生成exe文件运行界面如图所示,选择文件夹,点击清除旧版本,就可以清除不要的文件。现在需要在界面上添加一个选择按钮(勾选将清理功能添加到鼠标右键),勾选选择按钮后,右键点选需要清理的文件夹,点击清理,直接运行程序清理旧版本(不跳出界面),但是双击运行exe文件,还会跳出界面(因为有些文件是否要清除需要设定,可能会有所更改,现在的程序还没写这部分)。我以前用的一个别人做的软件是这样运行的。请指导一下怎么实现
from tkinter import * # 导入相关模块
from tkinter.filedialog import *
from tkinter import messagebox
import os
def set_directory(arg):
set_path = askdirectory()
arg.set(set_path)
global list_log_txt
global list_del
list_log_txt = []
list_del = [] # 储存需要删除的文件名
list_split = [] # 储存切片后的文件名,用于对比名字
dic_max = {} # 储存编号最大的文件名(只有一个就是它)
for root,dirs,files in os.walk(set_path):
for filename in files:
filename_split = filename.rsplit(".",1)
if filename_split[1].isdigit() == True:
if filename_split[0].split(".")[1] == "log" or filename_split[0].split(".")[1] == "txt":
list_log_txt.append(filename)
else:
list_split.append(filename_split)
list_del.append(filename)
for split in list_split:
if split[0] in dic_max.keys():
if int(split[1])>dic_max[split[0]]: # 列表元素split[1]大于字典dic_max中key(split[0])对应的value
dic_max[split[0]]=int(split[1]) # 字典dic_max中key(split[0])对应的value值变为int(split[1])
else:
dic_max[split[0]]= int(split[1]) # split[0]作为key split[1]作为value
for k in dic_max.keys():
list_del.remove((k+"."+str(dic_max[k])))
def clear_log_txt(): #删除log,txt文件
file_path = var_choose.get()
for name in list_log_txt:
filename = file_path+r'/'+name
os.remove(filename)
def clear_prt_drw_asm(): #删除list_del中的文件 prt,drw,asm文件
file_path = var_choose.get()
for name in list_del:
filename = file_path+r'/'+name
os.remove(filename)
def clear():
clear_prt_drw_asm()
clear_log_txt()
if __name__ == "__main__":
#建立主窗口并居中
root = Tk()
sw = root.winfo_screenwidth()
sh = root.winfo_screenheight()
rw = 500
rh = 700
rx = (sw-rw)/2
ry = (sh-rh)/2
root.geometry("%dx%d+%d+%d"%(rw,rh,rx,ry))
root.title("purge")
Label(root,text="目标文件夹",height=1).pack()
var_choose = StringVar()
# 文本属性textvariable 可变文本,与StringVar等配合着用
label_path = Entry(root,textvariable=var_choose,width=60).pack()
# 设置输入目录 command: 指定按钮消息的回调函数;
Button(root,text="选择目录",height=1,command=lambda:set_directory(var_choose)).pack()
Button(root,text="清除旧版本",height=1,command=lambda:clear()).pack()
root.mainloop()