上传文件至 /
This commit is contained in:
commit
2ee3cbe0de
193
clean12.py
Normal file
193
clean12.py
Normal file
@ -0,0 +1,193 @@
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
import tkinter as tk
|
||||
from tkinter import messagebox, scrolledtext, END
|
||||
|
||||
dir_del_log = []
|
||||
file_del_log = []
|
||||
rename_log = []
|
||||
error_log = []
|
||||
|
||||
def message_box(title, message):
|
||||
root = tk.Tk()
|
||||
root.withdraw()
|
||||
messagebox.showinfo(title, message)
|
||||
|
||||
return
|
||||
|
||||
def delete_dir(target, parent):
|
||||
for root, dirs, files in os.walk(parent, topdown=False):
|
||||
for name in dirs:
|
||||
if name == target:
|
||||
try:
|
||||
shutil.rmtree(os.path.join(root, name))
|
||||
dir_del_log.append('删除目录 ' + os.path.join(root, name))
|
||||
except Exception as e:
|
||||
error_log.append(e)
|
||||
|
||||
return
|
||||
|
||||
def delete_files(target, parent):
|
||||
for root, dirs, files in os.walk(parent, topdown=False):
|
||||
for name in files:
|
||||
if target in name:
|
||||
try:
|
||||
os.remove(os.path.join(root, name))
|
||||
file_del_log.append('删除文件 ' + os.path.join(root, name))
|
||||
except Exception as e:
|
||||
error_log.append(e)
|
||||
|
||||
return
|
||||
|
||||
def rename_files(target, parent):
|
||||
for root, dirs, files in os.walk(parent, topdown=False):
|
||||
for name in files:
|
||||
if name.endswith(target):
|
||||
try:
|
||||
relative_path = os.path.relpath(root, parent)
|
||||
new_name_prefix = os.path.basename(os.path.dirname(relative_path))
|
||||
new_name = new_name_prefix + target
|
||||
new_path = os.path.join(root, new_name)
|
||||
old_path = os.path.join(root, name)
|
||||
|
||||
if new_name != name:
|
||||
os.rename(old_path, new_path)
|
||||
rename_log.append(f"重命名 {old_path} 为 {new_path}")
|
||||
else:
|
||||
#print(f"Skipped renaming {name} as the new name is the same as the old one.")
|
||||
print("")
|
||||
except Exception as e:
|
||||
error_log.append(e)
|
||||
|
||||
return
|
||||
|
||||
def tagname_modify(target, parent):
|
||||
for root, dirs, files in os.walk(parent, topdown=False):
|
||||
for name in files:
|
||||
if name.endswith(target):
|
||||
try:
|
||||
pro = os.path.basename(os.path.dirname(root))
|
||||
# print(pro)
|
||||
file_path = os.path.join(root, name)
|
||||
with open(file_path, 'r') as f:
|
||||
file_content = f.read()
|
||||
|
||||
new_content = re.sub(r'<TargetName>.*?</TargetName>', f'<TargetName>{pro}</TargetName>', file_content)
|
||||
new_content = re.sub(r'<OutputName>.*?</OutputName>', f'<OutputName>{pro}</OutputName>', new_content)
|
||||
|
||||
with open(file_path, 'w') as f:
|
||||
f.write(new_content)
|
||||
|
||||
#print(f"Modified {file_path}")
|
||||
except Exception as e:
|
||||
error_log.append(e)
|
||||
|
||||
def format_all_logs(dir_del_log, file_del_log, rename_log, error_log):
|
||||
all_logs = []
|
||||
|
||||
if dir_del_log:
|
||||
all_logs.append("\n已删除目录:\n" + "\n".join(dir_del_log))
|
||||
|
||||
if file_del_log:
|
||||
all_logs.append("\n已删除文件:\n" + "\n".join(file_del_log))
|
||||
|
||||
if rename_log:
|
||||
all_logs.append("\n重命名文件:\n" + "\n".join(rename_log))
|
||||
|
||||
if error_log:
|
||||
all_logs.append("\n错误统计:\n" + "\n".join(error_log))
|
||||
|
||||
return "\n".join(all_logs)
|
||||
|
||||
class FileManagerApp(tk.Tk):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
self.title("Keil文件清理")
|
||||
self.geometry("780x620")
|
||||
|
||||
main_frame = tk.Frame(self)
|
||||
main_frame.pack(padx=20, pady=20)
|
||||
|
||||
auto_frame = tk.LabelFrame(main_frame, text="自动清理", padx=20, pady=20)
|
||||
auto_frame.grid(row=0, column=0, sticky="nsew")
|
||||
|
||||
tk.Label(auto_frame, text="自动模式会在当前目录递归搜索并删除以下目录和文件:").pack()
|
||||
tk.Label(auto_frame, text="Objects、Listings、uvguix文件\n").pack()
|
||||
tk.Label(auto_frame, text="同时将以下文件重命名为'../../'目录的名称:").pack()
|
||||
tk.Label(auto_frame, text="uvprojx文件、uvoptx文件\n").pack()
|
||||
tk.Button(auto_frame, text="开始清理", command=self.run_default_operations).pack()
|
||||
|
||||
manual_frame = tk.LabelFrame(main_frame, text="手动清理", padx=20, pady=20)
|
||||
manual_frame.grid(row=0, column=1, sticky="nsew")
|
||||
|
||||
tk.Label(manual_frame, text="输入需要删除的【文件夹】全称(区分大小写),以逗号隔开:").pack()
|
||||
tk.Label(manual_frame, text="(将递归搜索与这些名称完全匹配的文件夹,并删除)").pack()
|
||||
self.delete_d = tk.Entry(manual_frame)
|
||||
self.delete_d.pack(fill=tk.X, padx=5, pady=5)
|
||||
|
||||
tk.Button(manual_frame, text="清理文件夹", command=self.execute_directory).pack()
|
||||
|
||||
tk.Label(manual_frame, text="\n\n输入需要删除的【文件】部分名称,以逗号隔开:").pack()
|
||||
tk.Label(manual_frame, text="(将递归搜索包含这些名称(区分大小写)的文件,并删除)").pack()
|
||||
tk.Label(manual_frame, text="(注意:是包含名称就会被删除,慎用!)").pack()
|
||||
self.delete_f = tk.Entry(manual_frame)
|
||||
self.delete_f.pack(fill=tk.X, padx=5, pady=5)
|
||||
|
||||
tk.Button(manual_frame, text="清理文件", command=self.execute_file).pack()
|
||||
|
||||
log_frame = tk.LabelFrame(main_frame, text="执行日志", padx=20, pady=20)
|
||||
log_frame.grid(row=1, column=0, columnspan=2, sticky="nsew")
|
||||
|
||||
self.log_text = scrolledtext.ScrolledText(log_frame, state='disabled', height=10)
|
||||
self.log_text.pack(fill=tk.BOTH, expand=True)
|
||||
self.log_text.configure(state='normal')
|
||||
|
||||
self.status_bar = tk.Label(self, text="Ready ", anchor="w", relief=tk.SUNKEN, bd=1)
|
||||
self.status_bar2 = tk.Label(self, text= "当前目录:" +os.getcwd(), anchor="w", relief=tk.SUNKEN, bd=1)
|
||||
self.status_bar.pack(side=tk.BOTTOM, fill=tk.X)
|
||||
self.status_bar2.pack(side=tk.BOTTOM, fill=tk.X)
|
||||
|
||||
def run_default_operations(self):
|
||||
delete_dir("Objects", '.')
|
||||
delete_dir("Listings", '.')
|
||||
delete_files(".uvguix.",'.')
|
||||
|
||||
rename_files('.uvprojx', '.')
|
||||
rename_files('.uvoptx', '.')
|
||||
tagname_modify('.uvprojx', '.')
|
||||
|
||||
|
||||
self.update_logs()
|
||||
self.status_bar.config(text="Operations completed.")
|
||||
pass
|
||||
|
||||
def execute_directory(self):
|
||||
delete_dir_list = self.delete_d.get().split(',')
|
||||
for target in delete_dir_list:
|
||||
if target.strip():
|
||||
delete_dir(target.strip(), '.')
|
||||
|
||||
self.update_logs()
|
||||
self.status_bar.config(text="Operations completed.")
|
||||
|
||||
def execute_file(self):
|
||||
delete_file_list = self.delete_f.get().split(',')
|
||||
for target in delete_file_list:
|
||||
if target.strip():
|
||||
delete_files(target.strip(), '.')
|
||||
|
||||
self.update_logs()
|
||||
self.status_bar.config(text="Operations completed.")
|
||||
|
||||
def update_logs(self):
|
||||
all_logs_formatted = format_all_logs(dir_del_log, file_del_log, rename_log, error_log)
|
||||
self.log_text.configure(state='normal')
|
||||
self.log_text.delete(1.0, END)
|
||||
self.log_text.insert(tk.END, all_logs_formatted)
|
||||
self.log_text.configure(state='disabled')
|
||||
|
||||
if __name__ == '__main__':
|
||||
app = FileManagerApp()
|
||||
app.mainloop()
|
Loading…
Reference in New Issue
Block a user