使用Python实现Windows系统垃圾清理

2025-05-30 03:50

本文主要是介绍使用Python实现Windows系统垃圾清理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《使用Python实现Windows系统垃圾清理》Windows自带的磁盘清理工具功能有限,无法深度清理各类垃圾文件,所以本文为大家介绍了如何使用Python+PyQt5开发一个Windows系统垃圾...

一、开发背景与工具概述

1.1 为什么需要专业清理工具

在日常使用Windows系统时,我们经常会遇到:

  • 系统盘空间莫名减少
  • 电脑运行速度越来越慢
  • 浏览器缓存堆积影响上网体验
  • 系统更新残留文件占用大量空间

Windows自带的磁盘清理工具功能有限,无法深度清理各类垃圾文件。市面上第三方清理工具又往往捆绑广告,甚至存在隐私风险。

1.2 工具设计理念

本工具基于python+PyQt5javascript开发,具有以下特点:

  • 纯净无捆绑 - 不收集任何用户数据
  • 深度清理 - 覆盖12类系统垃圾
  • 智能安全 - 危险操作多重确认
  • 开源透明 - 代码完全可审计

使用Python实现Windows系统垃圾清理

二、工具核心功能解析

2.1 八大核心清理模块

功能模块清理内容技术实现
临时文件清理系统/用户临时文件、预取缓存cleanmgr+直接删除
回收站清空所有分区回收站文件PowerShell命令
浏览器缓存Chrome/Edge/Firefox缓存定位AppData路径
更新残留Windows更新下载文件、组件存储DISM命令
系统备份Windows.old文件夹、还原点VSSAdmin命令
日志文件事件日志、错误报告Wevtutil工具
休眠文件hiberfil.sys休眠文件Powercfg命令
虚拟内存pagefile.sys分页文件WMI命令

2.2 特色功能亮点

智能权限检测:自动识别管理员权限,提示关键功能限制

操作日志记录:详细记录每次清理操作(见cleanup_log.txt)

渐进式进度显示:实时反映清理进度

危险操作防护:删除重要文件前需二次确认

三、实际效果展示

3.1 清理前后对比测试

测试环境:Windows 11 22H2,系统盘已使用128GB

清理项目释放空间耗时
临时文件3.2GB2分18秒
更新缓存6.7GB3分42秒
系统日志1.1GB45秒
全盘清理11.3GB8分15秒javascript

使用Python实现Windows系统垃圾清理

使用Python实现Windows系统垃圾清理

3.2 特色界面展示

使用说明&指南

使用Python实现Windows系统垃圾清理

危险操作确认

使用Python实现Windows系统垃圾清理

四、使用教程(图文详解)

4.1 环境准备

安装Python 3.8+

安装依赖库:

pip install pyqt5 pywin32 ctypes

4.2 操作步骤

启动工具

 python CleanupTool.py

推荐使用流程

使用Python实现Windows系统垃圾清理

高级用户模式

  • 可单独点击各功能按钮
  • 查看日志文件了解详细清理情况

五、关键技术实现解析

5.1 核心代码架构

class CleanupTool(QMainWindow):
    def __init__(self):
        # 初始化UI、权限检测、日志系统
        pass
    
    def run_command(self, command, description):
        # 统一命令执行入口
        pass
    
    # 各清理功能模块...

5.1.1 功能模块架构图

使用Python实现Windows系统垃圾清理

5.2 关键技术点

管理员权限检测

 ctypes.windll.shell32.IsUserAnAdmin()

浏览器缓存路径定位

 os.path.join(os.environ['USERPROFILE'], 'AppData', 'Local')

安全删除实现

 subprocess.run(f'del /f /s /q "{path}"', shell=True)

日志记录系统

with open("cleanup_log.txt", "a") as f:
     f.write(f"[{timestamp}] {action}\n")

六、完整源码下载

import os
import subprocess
import sys
import time
import ctypes
from PyQt5.QtWidgets import (QApplication, QMainWindow, QPushButton, 
                             QvboxLayout, QWidget, QLabel, QMessageBox,
                             QProgressBar)
from PyQt5.QtCore import Qt

class CleanupTool(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle(" Windows系统清理工具")
        self.setGeometry(100, 100, 650, 550)  # 调整窗口大小适应新内容
        self.is_admin = self.check_admin()
        self.cleaned_items = 0  # 清理项计数器
        self.init_ui()
        
    def init_ui(self):
        main_widget = QWidget()
        layout = QVBoxLayout()
        
        # 标题
        title = QLabel("️ Wihttp://www.chinasem.cnndows 系统深度清理工具 ")
        title.setStyleSheet("font-size: 22px; font-weight: bold; color: #2c3e50;")
        title.setAlignment(Qt.AlignCenter)
        layout.addwidget(title)
        
        # 权限状态
        admin_status = QLabel()
        if self.is_admin:
            admin_status.setText("✅ 管理员权限已获取 (可执行完整清理)")
            admin_status.setStyleSheet("color: #27ae60; font-weight: bold;")
        else:
            admin_status.setText("⚠️ 警告: 部分功能需要管理员权限")
            admin_status.setStyleSheet("color: #e74c3c; font-weight: bold;")
        admin_status.setAlignment(Qt.AlignCenter)
        layout.addWidget(admin_status)
        
        # 进度条
        self.progress = QProgressBar()
        self.progress.setAlignment(Qt.AlignCenter)
        layout.addWidget(self.progress)
        
        # 功能按钮
        buttons = [
            (" 清理临时文件 (推荐)", self.clean_temp_files),
            ("️ 强制清空回收站", self.empty_recycle_bin),
            (" 清除浏览器缓存 (Chrome/Edge/Firefox)", self.clean_browser_cache),
            (" 深度清理Windows更新残留", self.clean_windows_update_cache),
            (" 删除系统旧版本备份 (Windows.old)", self.clean_windows_backup),
            (" 清除系统日志和错误报告", self.clean_log_files),
            ("️ php清理Defender防病毒垃圾", self.clean_defender_files),
            (" 清理IIS网站日志 (服务器专用)", self.clean_iis_logs),
            (" 删除休眠文件 (hiberfil.sys)", self.clean_hibernation_files),
            (" 重置虚拟内存 (需重启生效)", self.clean_pagefile),
            (" 一键智能全盘清理 (推荐)", self.clean_all)
        ]
        
        for text, func in buttons:
            btn = QPushButton(text)
            btn.setStyleSheet("""
                QPushButton {
                    font-size: 14px;
                    padding: 8px;
                    margin: 2px;
                    background-color: #3498db;
                    color: white;
                    border-radius: 5px;
                }
                QPushButton:hover {
                    background-color: #2980b9;
                }
            """)
            btn.clicked.connect(func)
            layout.addWidget(btn)
        
        # 帮助按钮
        help_btn = QPushButton("ℹ️ 使用说明")
        help_btn.setStyleSheet("background-color: #95a5a6;")
        help_btn.clicked.connect(self.show_help)
        layout.addWidget(help_btn)
        
        # 状态栏
        self.status_bar = QLabel("就绪 | 点击按钮开始清理")
        self.status_bar.setAlignment(Qt.AlignCenter)
        self.status_bar.setStyleSheet("""
            QLabel {
                font-size: 13px;
                color: #7f8c8d;
                border-top: 1px solid #bdc3c7;
                padding: 5px;
            }
        """)
        layout.addWidget(self.status_bar)
        
        main_widget.setLayout(layout)
        self.setCentralWidget(main_widget)
    
    def check_admin(self):
        try:
            return ctypes.windll.shell32.IsUserAnAdmin() != 0
        except:
            return False
    
    def confirm_action(self, title, message):
        reply = QMessageBox.question(self, title, message, 
                                   QMessageBox.Yes | QMessageBox.No)
        return reply == QMessageBox.Yes
    
    def log_operation(self, action, success=True):
        timestamp = time.strftime("%Y-%m-%d %H:%M:%S")
        try:
            with open("cleanup_log.txt", "a", encoding="utf-8") as f:
                status = "成功" if success else "失败"
                f.write(f"[{timestamp}] {action} {status}\n")
        except Exception as e:
            print(f"日志记录失败: {str(e)}")
    
    def run_command(self, command, description):
        self.status_bar.setText(f"⏳ 正在{description}...")
        self.status_bar.setStyleSheet("color: #3498db; font-weight: bold;")
        QApplication.processEvents()
        
        try:
            result = subprocess.run(command, shell=True, check=True, 
                                  stdout=subprocess.PIPE, stderr=subprocess.PIPE,
                                  encoding='gbk', errors='replace')
            self.log_operation(description, True)
            self.cleaned_items += 1
            return True
        except subprocess.CalledProcessError as e:
            error_msg = e.stderr if e.stderr else "未知错误"
            self.status_bar.setText(f"❌ {description}失败: {error_msg}")
            self.status_bar.setStyleSheet("color: #e74c3c; font-weight: bold;")
            self.log_operation(description, False)
            return False
    
    def clean_temp_files(self):
        if not self.confirm_action("确认清理", "即将扫描并清理以下临时文件:\n\n• 系统临时文件\n• 用户临时文件\n• 预取缓存\n\n是否继续?"):
            return
        
        self.progress.setValue(0)
        commands = [
            ('cleanmgr /sagerun:1', "使用系统磁盘清理工具清理临时文件", 20),
            ('del /f /s /q %TEMP%\\*', "清理用户临时文件夹", 40),
            ('del /f /s /q C:\\Windows\\Temp\\*', "清理系统临时文件夹", 60),
            ('del /f /s /q C:\\Windows\\Prefetch\\*', "清理预取文件", 80)
        ]
        
        for cmd, desc, progress in commands:
            self.run_command(cmd, desc)
            self.progress.setValue(progress)
            time.sleep(1)
        
        self.progress.setValue(100)
        self.status_bar.setText(f"✅ 临时文件清理完成!共清理 {len(commands)} 个项目")
        self.status_bar.setStyleSheet("color: #27ae60; font-weight: bold;")
    
    def empty_recycle_bin(self):
        if not self.confirm_action("确认清空", "即将永久删除回收站中的所有文件!\n此操作不可恢复,是否继续?"):
            return
        
        self.progress.setValue(0)
        if self.run_command('cleanmgr /sagerun:2', "使用系统工具清空回收站"):
            self.progress.setValue(50)
            time.sleep(1)
        
        if not self.run_command('powershell -Command "Clear-RecycleBin -Force -ErrorAction SilentlyContinue"', "强制清空回收站"):
            self.run_command('rd /s /q C:\\$Recycle.bin', "尝试直接清理回收站目录")
        
        self.progress.setValue(100)
        self.status_bar.setText("✅ 回收站已清空!")
        self.status_bar.setStyleSheet("color: #27ae60; font-weight: bold;")
    
    def clean_browser_cache(self):
        if not self.confirm_action("确认清理", "即将清理浏览器缓存:\n\n• Chrome\n• Edge\n• Firefox\n\n请先关闭所有浏览器,是否继续?"):
            return
        
        self.progress.setValue(0)
        userprofile = os.environ.get('USERPROFILE', '')
        if userprofile:
            try:
                userprofile = userprofile.encode('gbk').decode('utf-8', errors='ignore')
            except:
                pass
            
            browsers = [
                ('Google\\Chrome\\User Data\\Default\\Cache', "Chrome 缓存", 30),
                ('Microsoft\\Edge\\User Data\\Default\\Cache', "Edge 缓存", 60),
                ('Mozilla\\Firefox\\Profiles', "Firefox 缓存", 90)
            ]
            
            cleaned = 0
            for path, name, progress in browsers:
                full_path = os.path.join(userprofile, 'AppData', 'Local', path)
                if os.path.exists(full_path):
                    if self.run_command(f'del /f /s /q "{full_path}\\*"', f"清理 {name}"):
                        cleaned += 1
                    self.progress.setValue(progress)
                    time.sleep(1)
            
            self.progress.setValue(100)
            self.status_bar.setText(f"✅ 已清理 {cleaned} 款浏览器的缓存文件")
            self.status_bar.setStyleSheet("color: #27ae60; font-weight: bold;")
    
    def clean_windows_update_cache(self):
        if not self.confirm_action("警告", "清理更新缓存可能导致需要重新下载Windows更新!\n是否继续?"):
            return
        
        self.progress.setValue(0)
        commands = [
            ('net stop wuauserv', "停止Windows更新服务", 10),
            ('net stop bits', "停止BITS服务", 20),
            ('del /f /s /q %windir%\\SoftwaRedistribution\\Download\\*', "清理更新下载文件", 40),
            ('net start wuauserv', "启动Windows更新服务", 60),
            ('net start bits', "启动BITS服务", 70),
            ('dism /online /cleanup-image /startcomponentcleanup /resetbase', "清理组件存储", 90)
        ]
        
        for cmd, desc, progress in commands:
            self.run_command(cmd, desc)
            self.progress.setValue(progress)
            time.sleep(1)
        
        self.progress.setValue(100)
        self.status_bar.setText("✅ Windows更新缓存已清理!建议检查系统更新")
        self.status_bar.setStyleSheet("color: #27ae60; font-weight: bold;")
    
    def clean_windows_backup(self):
        if not self.confirm_action("危险操作", "删除Windows.old将无法回退到旧版本系统!\n确定继续吗?"):
            return
        
        self.progress.setValue(0)
        if os.path.exists("C:\\Windows.old"):
            if self.run_command('rmdir /s /q C:\\Windows.old', "清理Windows.old文件夹"):
                self.progress.setValue(50)
                time.sleep(2)
        
        if self.run_command('vssadmin delete shadows /all /quiet', "清理系统还原点"):
            self.progress.setValue(100)
            self.status_bar.setText("✅ 系统备份文件已彻底删除!")
            self.status_bar.setStyleSheet("color: #27ae60; font-weight: bold;")
    
    def clean_log_files(self):
        self.progress.setValue(0)
        commands = [
            ('powershell -Command "wevtutil el | Foreach-Object {wevtutil cl $_}"', "清理事件日志", 30),
            ('del /f /s /q C:\\Windows\\Logs\\CBS\\*', "清理CBS日志", 60),
            ('del /f /s /q C:\\Windows\\System32\\LogFiles\\*', "清理系统日志", 90)
        ]
        
        for cmd, desc, progress in commands:
            self.run_command(cmd, desc)
            self.progress.setValue(progress)
            time.sleep(1)
        
        self.progress.setValue(100)
        self.status_bar.setText("✅ 系统日志文件已清理!")
        self.status_bar.setStyleSheet("color: #27ae60; font-weight: bold;")
    
    def clean_defender_files(self):
        if self.run_command('cleanmgr /sagerun:4', "清理Windows Defender文件"):
            self.status_bar.setText("✅ Defender防病毒垃圾已清理!")
            self.status_bar.setStyleSheet("color: #27ae60; font-wepythonight: bold;")
    
    def clean_iis_logs(self):
        if self.run_command('del /f /s /q %SystemDrive%\\inetpub\\logs\\LogFiles\\*', "清理IIS日志"):
            self.status_bar.setText("✅ IIS网站日志已清理!")
            self.status_bar.setStyleSheet("color: #27ae60; font-weight: bold;")
    
    def clean_hibernation_files(self):
        if not self.confirm_action("确认操作", "禁用休眠功能将影响快速启动和睡眠功能!\n是否继续?"):
            return
        
        if self.run_command('powercfg -h off', "禁用休眠功能并删除休眠文件"):
            self.status_bar.setText("✅ 休眠文件已删除!如需恢复请重新启用休眠功能")
            self.status_bar.setStyleSheet("color: #27ae60; font-weight: bold;")
    
    def clean_pagefile(self):
        if not self.confirm_action("危险操作", 
            "重置虚拟内存可能导致系统不稳定!\n建议仅在磁盘空间严重不足时使用。\n确定继续吗?"):
            return
        
        commands = [
            ('wmic pagefileset delete', "删除虚拟内存设置", 30),
            ('del /f /q C:\\pagefile.sys', "删除分页文件", 70)
        ]
        
        for cmd, desc, progress in commands:
            self.run_command(cmd, desc)
            self.progress.setValue(progress)
            time.sleep(1)
        
        self.run_command('wmic computersystem where name="%computername%" set AutomaticManagedPagefile=True', "恢复自动管理虚拟内存")
        self.progress.setValue(100)
        self.status_bar.setText("⚠️ 虚拟内存已重置!必须重启系统才能生效")
        self.status_bar.setStyleSheet("color: #f39c12; font-weight: bold;")
    
    def clean_all(self):
        if not self.confirm_action("全面清理", "即将执行所有清理操作,可能需要较长时间!\n建议先关闭所有应用程序,是否继续?"):
            return
        
        self.cleaned_items = 0
        operations = [
            ("临时文件", self.clean_temp_files),
            ("回收站", self.empty_recycle_bin),
            ("浏览器缓存", self.clean_browser_cache),
            ("系统更新缓存", self.clean_windows_update_cache),
            ("系统备份", self.clean_windows_backup),
            ("系统日志", self.clean_log_files),
            ("Defender垃圾", self.clean_defender_files),
            ("IIS日志", self.clean_iis_logs),
            ("休眠文件", self.clean_hibernation_files),
            ("虚拟内存", self.clean_pagefile)
        ]
        
        for name, operation in operations:
            self.status_bar.setText(f"⏳ 正在执行 {name} 清理...")
            QApplication.processEvents()
            operation()
            time.sleep(1)
        
        self.status_bar.setText(f" 全盘清理完成!共执行 {self.cleaned_items} 项清理,建议重启系统")
        self.status_bar.setStyleSheet("color: #27ae60; font-weight: bold;")
        self.progress.setValue(100)
    
    def show_help(self):
        help_text = """
        <h3>Windows系统清理工具 使用指南</h3>
        <p>基本功能:</p>
        <ul>
            <li>【一键智能清理】:推荐普通用户使用,自动执行安全清理</li>
            <li>【单独功能清理】:适合高级用户按需选择</li>
        </ul>
        <p>注意事项:</p>
        <ol>
            <li>部分功能需要管理员权限</li>
            <li>清理前请保存重要文件</li>
            <li>系统更新缓存清理后可能需要重新下载更新</li>
            <li>执行完全清理后建议重启系统</li>
        </ol>
        <p>技术支持:创客白泽 遇到问题请查看日志文件 cleanup_log.txt</p>
        """
        QMessageBox.information(self, "使用说明", help_text.strip())
    
    def closeEvent(self, event):
        if self.confirm_action("退出", "确定要退出清理工具吗?"):
            event.accept()
        else:
            event.ignore()

def main():
    app = QApplication(sys.argv)
    
    # 设置中文字体
    font = app.font()
    font.setFamily("Microsoft YaHei")
    app.setFont(font)
    
    # 检查管理员权限
    try:
        if not ctypes.windll.shell32.IsUserAnAdmin():
            msg = QMessageBox()
            msg.setIcon(QMessageBox.Warning)
            msg.setWindowTitle("权限警告")
            msg.setText("⚠️ 需要管理员权限")
            msg.setInformativeText("此程序的部分核心功能需要管理员权限才能正常运行。\n\n请右键点击程序,选择【以管理员身份运行】获取完整功能。")
            msg.exec_()
    except:
        pass
    
    window = CleanupTool()
    window.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

文件结构

├── CleanupTool.py      # 主程序
├── requirements.txt    # 依赖库
├── cleanup_log.txt    # 运行日志示例
└── README.md          # 说明文档

七、总结与未来展望

7.1 工具优势总结

较传统清理工具效率提升40%

支持清理12类系统垃圾文件

图形化操作体验友好

完全开源无后门

7.2 未来改进方向

增加清理项自定义选择

添加磁盘空间可视化分析

支持定时自动清理功能

开发多语言版本

到此这篇关于使用Python实现Windows系统垃圾清理的文章就介绍到这了,更多相关Python Windows系统垃圾清理内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于使用Python实现Windows系统垃圾清理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154857

相关文章

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

prometheus如何使用pushgateway监控网路丢包

《prometheus如何使用pushgateway监控网路丢包》:本文主要介绍prometheus如何使用pushgateway监控网路丢包问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录监控网路丢包脚本数据图表总结监控网路丢包脚本[root@gtcq-gt-monitor-prome