用户:忙碌的程序猿查看:0 回复:0 评论:0 创建时间:2023-08-27T16:40:02
【作品展示】

【作品介绍】
方便快捷,操作简单,高效清理,用于专门的磁盘清理工具。
【作品源代码】
import os
import shutil
import tkinter as tk
from tkinter import filedialog, messagebox
# 创建主窗口
window = tk.Tk()
window.title("由隋非凡制作 - 磁盘分析器")
window.geometry("360x750")
# 备份文件夹路径
backup_folder = "C:/beifen"
def get_disk_partitions():
"""获取系统中的磁盘分区列表"""
partitions = []
if os.name == "nt":
import string
for letter in string.ascii_uppercase:
drive_path = letter + ":/"
if os.path.isdir(drive_path):
partitions.append(drive_path)
else:
partitions.append("/")
return partitions
def scan_disk():
"""扫描选择磁盘"""
disk_path = filedialog.askdirectory()
if disk_path:
file_types = {
"重复文件": set(),
"日志文件": set(),
"安装包": set(),
"垃圾文件": set()
}
total_size = 0
# 遍历磁盘中的所有文件
for dirpath, dirnames, filenames in os.walk(disk_path):
for filename in filenames:
file_path = os.path.join(dirpath, filename)
file_size = os.path.getsize(file_path)
total_size += file_size
# 判断文件类型并添加到对应的文件类型集合中
if filename.endswith(".log"):
file_types["日志文件"].add(file_path)
elif filename.endswith(".exe") or filename.endswith(".msi"):
file_types["安装包"].add(file_path)
elif filename.endswith(".bak") or filename.endswith(".tmp"):
file_types["垃圾文件"].add(file_path)
else:
with open(file_path, "rb") as file:
content = file.read()
if content in file_types["重复文件"]:
file_types["重复文件"].add(file_path)
else:
file_types["重复文件"].discard(content)
# 清空窗口内容
for widget in result_frame.winfo_children():
widget.destroy()
# 显示扫描结果
tk.Label(result_frame, text="垃圾文件总大小:").grid(
row=0, column=0, sticky="w")
tk.Label(result_frame, text="{:.2f} MB".format(
total_size / (1024 * 1024))).grid(row=0, column=1, sticky="w")
tk.Label(result_frame, text="").grid(row=1, column=0, columnspan=2)
tk.Label(result_frame, text="重复文件:").grid(
row=2, column=0, columnspan=2, sticky="w")
tk.Listbox(result_frame, selectmode=tk.MULTIPLE, height=5, width=50, selectbackground="lightblue",
selectborderwidth=0, exportselection=False, yscrollcommand=True,
listvariable=tk.StringVar(value=list(file_types["重复文件"]))).grid(row=3, column=0, columnspan=2)
tk.Label(result_frame, text="").grid(row=4, column=0, columnspan=2)
tk.Label(result_frame, text="日志文件:").grid(
row=5, column=0, columnspan=2, sticky="w")
tk.Listbox(result_frame, selectmode=tk.MULTIPLE, height=5, width=50, selectbackground="lightblue",
selectborderwidth=0, exportselection=False, yscrollcommand=True,
listvariable=tk.StringVar(value=list(file_types["日志文件"]))).grid(row=6, column=0, columnspan=2)
tk.Label(result_frame, text="").grid(row=7, column=0, columnspan=2)
tk.Label(result_frame, text="安装包:").grid(
row=8, column=0, columnspan=2, sticky="w")
tk.Listbox(result_frame, selectmode=tk.MULTIPLE, height=5, width=50, selectbackground="lightblue",
selectborderwidth=0, exportselection=False, yscrollcommand=True,
listvariable=tk.StringVar(value=list(file_types["安装包"]))).grid(row=9, column=0, columnspan=2)
tk.Label(result_frame, text="").grid(row=10, column=0, columnspan=2)
tk.Label(result_frame, text="垃圾文件:").grid(
row=11, column=0, columnspan=2, sticky="w")
tk.Listbox(result_frame, selectmode=tk.MULTIPLE, height=10, width=50, selectbackground="lightblue",
selectborderwidth=0, exportselection=False, yscrollcommand=True,
listvariable=tk.StringVar(value=list(file_types["垃圾文件"]))).grid(row=12, column=0, columnspan=2)
def clean_files():
"""清理垃圾文件"""
selected_files = []
# 获取所有被选中的文件
for lb in result_frame.winfo_children():
if isinstance(lb, tk.Listbox) and lb.curselection():
selected_index = lb.curselection()
file_paths = lb.get(0, tk.END)
selected_files += [file_paths[index] for index in selected_index]
if selected_files:
try:
if not os.path.exists(backup_folder):
os.makedirs(backup_folder)
# 将选中的文件进行备份
for file_path in selected_files:
filename = os.path.basename(file_path)
shutil.copy2(file_path, os.path.join(backup_folder, filename))
messagebox.showinfo("备份成功", "备份文件已保存至:" + backup_folder)
# 删除选中的文件
for file_path in selected_files:
os.remove(file_path)
messagebox.showinfo("清理完成", "垃圾文件已成功删除!")
scan_disk()
except Exception as e:
messagebox.showerror("错误", "清理过程中出现错误:" + str(e))
else:
messagebox.showwarning("未选中文件", "请先选择要清理的文件!")
def open_backup_folder():
"""打开备份文件夹"""
if os.path.exists(backup_folder):
os.startfile(backup_folder)
else:
messagebox.showwarning("文件夹不存在", "备份文件夹不可访问!")
def show_help():
"""显示帮助信息"""
messagebox.showinfo("帮助", "备份文件保存在:" + backup_folder)
# 创建选择磁盘部分的窗口部件
select_disk_frame = tk.Frame(window)
select_disk_frame.pack(pady=10)
tk.Label(select_disk_frame, text="选择磁盘:").grid(row=0, column=0)
# 动态加载磁盘分区列表
disks = get_disk_partitions()
disk_variable = tk.StringVar(value=disks)
tk.OptionMenu(select_disk_frame, disk_variable, *disks).grid(row=0, column=1)
# 创建扫描和清理按钮部分的窗口部件
action_frame = tk.Frame(window)
action_frame.pack(pady=10)
scan_button = tk.Button(action_frame, text="扫描", command=scan_disk)
scan_button.grid(row=0, column=0, padx=10)
clean_button = tk.Button(action_frame, text="一键清理", command=clean_files)
clean_button.grid(row=0, column=1, padx=10)
# 创建显示扫描结果部分的窗口部件
result_frame = tk.Frame(window)
result_frame.pack(pady=10)
# 创建备份按钮
backup_button = tk.Button(window, text="备份", command=open_backup_folder)
backup_button.pack(pady=10)
# 创建帮助按钮
help_button = tk.Button(window, text="帮助", command=show_help)
help_button.pack(pady=10)
# 运行主程序
window.mainloop()
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn