吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2480|回复: 49
收起左侧

[原创工具] 自动清理缓存工具(python代码)

  [复制链接]
WERDD 发表于 2025-11-7 15:35
本帖最后由 WERDD 于 2025-11-7 15:40 编辑

自动清理缓存的小软件,在单位办公时候总是卡的动不了,所以我想着用python做一个可以自动清理缓存的软件
我使用的PyQt5进行可视化,点击开始后可实现自动清理,不需要手动输入%temp%了
相对来说方便一点

然后我已经打包成exe文件了,不需要代码的兄弟们直接下载食用即可

https://www.ilanzou.com/s/9teNt5Xz?code=52pj
密码:52pj
最后是源代码以及相关运行截图
[Python] 纯文本查看 复制代码
import os
import shutil
import time
import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QPushButton,
                             QTextEdit, QVBoxLayout, QHBoxLayout,
                             QWidget, QLabel, QProgressBar)
from PyQt5.QtCore import Qt, QThread, pyqtSignal
from PyQt5.QtGui import QFont
import pyautogui
import pygetwindow as gw


class CleanThread(QThread):
    """清理线程,避免界面卡顿"""
    log_signal = pyqtSignal(str)  # 发送日志信息
    progress_signal = pyqtSignal(int)  # 发送进度
    finished_signal = pyqtSignal()  # 清理完成信号

    def run(self):
        try:
            # 获取临时文件夹路径
            temp_path = os.environ.get('TEMP', '')
            if not temp_path or not os.path.exists(temp_path):
                self.log_signal.emit("❌ 无法获取临时文件夹路径")
                self.finished_signal.emit()
                return

            self.log_signal.emit(f"📂 临时文件夹路径: {temp_path}")
            self.log_signal.emit("▶️ 开始模拟打开临时文件夹...")

            # 模拟Win+R打开运行窗口
            try:
                pyautogui.hotkey('win', 'r')
                self.log_signal.emit("✅ 已打开运行窗口")
                time.sleep(1)

                # 输入%temp%并回车
                pyautogui.typewrite('%temp%')
                pyautogui.press('enter')
                self.log_signal.emit("✅ 已打开临时文件夹")
                time.sleep(2)  # 等待文件夹打开
            except Exception as e:
                self.log_signal.emit(f"❌ 打开临时文件夹失败: {str(e)}")
                self.finished_signal.emit()
                return

            # 开始清理文件
            self.log_signal.emit("\n🔍 开始扫描并清理文件...")
            items = os.listdir(temp_path)
            total = len(items)
            file_count = 0
            folder_count = 0

            # 先删除文件
            for i, item in enumerate(items):
                # 更新进度
                progress = int((i / total) * 50)  # 前50%进度用于删除文件
                self.progress_signal.emit(progress)

                item_path = os.path.join(temp_path, item)
                try:
                    if os.path.isfile(item_path) or os.path.islink(item_path):
                        os.unlink(item_path)
                        file_count += 1
                        self.log_signal.emit(f"🗑️ 已删除文件: {item}")
                except Exception as e:
                    self.log_signal.emit(f"⚠️ 无法删除文件 {item}: {str(e)}")
                time.sleep(0.01)

            # 再删除文件夹
            folders = [item for item in os.listdir(temp_path) if os.path.isdir(os.path.join(temp_path, item))]
            folder_total = len(folders)
            for i, item in enumerate(folders):
                # 更新进度(后50%用于删除文件夹)
                progress = 50 + int((i / folder_total) * 50) if folder_total > 0 else 100
                self.progress_signal.emit(progress)

                item_path = os.path.join(temp_path, item)
                try:
                    shutil.rmtree(item_path)
                    folder_count += 1
                    self.log_signal.emit(f"📁 已删除文件夹: {item}")
                except Exception as e:
                    self.log_signal.emit(f"⚠️ 无法删除文件夹 {item}: {str(e)}")
                time.sleep(0.01)

            # 关闭临时文件夹窗口
            try:
                for window in gw.getAllWindows():
                    if "temp" in window.title.lower() or "临时文件夹" in window.title:
                        window.close()
                        self.log_signal.emit("\n✅ 已关闭临时文件夹窗口")
                        break
            except Exception as e:
                self.log_signal.emit(f"⚠️ 关闭窗口失败: {str(e)}")

            # 清理结果
            self.log_signal.emit(f"\n🎉 清理完成!")
            self.log_signal.emit(f"📊 共删除 {file_count} 个文件和 {folder_count} 个文件夹")
            self.log_signal.emit("💡 提示:部分正在使用的文件/文件夹可能未被删除,这是正常现象")

        except Exception as e:
            self.log_signal.emit(f"❌ 清理过程中发生错误: {str(e)}")
        finally:
            self.progress_signal.emit(100)
            self.finished_signal.emit()


class TempCleanerUI(QMainWindow):
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        # 窗口基本设置
        self.setWindowTitle("临时文件清理工具")
        self.setGeometry(300, 200, 800, 600)
        self.setMinimumSize(600, 500)

        # 中心部件和布局
        central_widget = QWidget()
        self.setCentralWidget(central_widget)
        main_layout = QVBoxLayout(central_widget)
        main_layout.setContentsMargins(20, 20, 20, 20)
        main_layout.setSpacing(15)

        # 标题
        title_label = QLabel("临时文件清理工具")
        title_font = QFont("微软雅黑", 16, QFont.Bold)
        title_label.setFont(title_font)
        title_label.setAlignment(Qt.AlignCenter)
        main_layout.addWidget(title_label)

        # 说明文字
        desc_label = QLabel(
            "此工具将自动打开系统临时文件夹并清理其中的文件。清理过程中请不要操作电脑,以免影响自动化流程。")
        desc_label.setWordWrap(True)
        desc_label.setFont(QFont("微软雅黑", 10))
        desc_label.setStyleSheet("color: #666;")
        main_layout.addWidget(desc_label)

        # 按钮区域
        btn_layout = QHBoxLayout()
        self.start_btn = QPushButton("开始清理")
        self.start_btn.setFont(QFont("微软雅黑", 12))
        self.start_btn.setStyleSheet("""
            QPushButton {
                background-color: #2196F3;
                color: white;
                padding: 10px 20px;
                border-radius: 5px;
            }
            QPushButton:disabled {
                background-color: #cccccc;
            }
        """)
        self.start_btn.clicked.connect(self.start_cleaning)
        btn_layout.addWidget(self.start_btn)
        btn_layout.addStretch()
        main_layout.addLayout(btn_layout)

        # 进度条
        self.progress_bar = QProgressBar()
        self.progress_bar.setStyleSheet("""
            QProgressBar {
                border: 1px solid #bbb;
                border-radius: 4px;
                text-align: center;
                height: 20px;
            }
            QProgressBar::chunk {
                background-color: #2196F3;
                width: 10px;
            }
        """)
        self.progress_bar.setValue(0)
        main_layout.addWidget(self.progress_bar)

        # 日志区域
        log_label = QLabel("清理日志:")
        log_label.setFont(QFont("微软雅黑", 11, QFont.Bold))
        main_layout.addWidget(log_label)

        self.log_text = QTextEdit()
        self.log_text.setReadOnly(True)
        self.log_text.setFont(QFont("Consolas", 10))
        self.log_text.setStyleSheet("background-color: #f9f9f9; border: 1px solid #ddd; border-radius: 4px;")
        main_layout.addWidget(self.log_text)

        # 状态标签
        self.status_label = QLabel("就绪")
        self.status_label.setFont(QFont("微软雅黑", 9))
        self.status_label.setStyleSheet("color: #666;")
        main_layout.addWidget(self.status_label)

        # 初始化线程
        self.clean_thread = None

    def start_cleaning(self):
        if self.clean_thread and self.clean_thread.isRunning():
            self.log_text.append("⚠️ 清理正在进行中,请不要重复点击!")
            return

        # 重置状态
        self.log_text.clear()
        self.progress_bar.setValue(0)
        self.start_btn.setEnabled(False)
        self.start_btn.setText("清理中...")
        self.status_label.setText("状态:清理进行中...")

        # 启动清理线程
        self.clean_thread = CleanThread()
        self.clean_thread.log_signal.connect(self.append_log)
        self.clean_thread.progress_signal.connect(self.update_progress)
        self.clean_thread.finished_signal.connect(self.clean_finished)
        self.clean_thread.start()

    def append_log(self, message):
        """添加日志到文本框并自动滚动到底部"""
        self.log_text.append(message)
        self.log_text.moveCursor(self.log_text.textCursor().End)

    def update_progress(self, value):
        """更新进度条"""
        self.progress_bar.setValue(value)

    def clean_finished(self):
        """清理完成后恢复状态"""
        self.start_btn.setEnabled(True)
        self.start_btn.setText("开始清理")
        self.status_label.setText("状态:清理完成")


if __name__ == "__main__":
    # 确保中文显示正常
    QApplication.setApplicationName("临时文件清理工具")
    app = QApplication(sys.argv)
    window = TempCleanerUI()
    window.show()
    sys.exit(app.exec_())

运行截图

运行截图

日志

日志

软件界面

软件界面

免费评分

参与人数 13吾爱币 +17 热心值 +11 收起 理由
mzq123000 + 1 + 1 实用至极
cnngtc + 2 + 1 看起来不错 有空试一下 看看效果
plmoknijb + 1 + 1 我很赞同!
cnjesse + 1 热心回复!
ptyjttwj + 1 + 1 我很赞同!
brf2222 + 1 用心讨论,共获提升!
YFBAIL + 1 + 1 谢谢@Thanks!
antao888 + 1 + 1 我很赞同!
ZZHNOK + 1 我很赞同!
laobj + 1 谢谢@Thanks!
leader帮主 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
凌晨的圆月 + 1 谢谢@Thanks!
风之暇想 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

dety 发表于 2025-11-9 15:39
谢谢分享好软
shenshen 发表于 2025-11-9 20:36
leader帮主 发表于 2025-11-10 08:09
凌晨的圆月 发表于 2025-11-10 10:44
谢谢分享,已使用
jsj86 发表于 2025-11-10 11:33
还行,比较实用
xiaofu10 发表于 2025-11-10 17:05

感谢分享了
sw123 发表于 2025-11-11 07:59
感谢分享,这个工具看起来不错
FfEi8 发表于 2025-11-11 08:05
能开发一介打开自动执行
jun269 发表于 2025-11-11 08:19
类似这样的工具很多啊,比如火绒杀毒软件就自带了这些工具了,但还是要感谢楼主分享精神
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-3-4 15:58

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表