python 写的C盘自动清理缓存工具

部署运行你感兴趣的模型镜像

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

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

夸克链接:https://pan.quark.cn/s/98f7f81b2578

百度链接:https://pan.baidu.com/s/1ggm6PQbXITeTJbtiQ94TkQ?pwd=fuw9

源代码

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_())

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

企鹅侠客

您的打赏是我创作旅程中的关键燃

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值