Python实现自动清理电脑垃圾文件详解

作者:Python?集中营 时间:2023-05-18 00:50:22 

经常存在在我们的电脑中的垃圾文件主要是指系统在运行过程中产生的tmp临时文件、日志文件、临时备份文件等。垃圾清理器的作用其实也是对这些文件进行清理,不会影响到我们使用产生的数据文件。如果是手动删除的话要一个一个的找出来去删除就比较麻烦了,用python写一个脚本直接启动就大功告成了。

Python实现自动清理电脑垃圾文件详解

在这个脚本的实现过程中使用到的内置库就是os库,没有通过其他的三方插件进行实现。所以也不用下载其他的python模块,直接调用内置库就OK了。

import os

因为我们使用界面化的处理,这里导入一下pyqt5的模块来实现UI界面布局。

from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys

先将需要使用的UI界面编写完成,还是使用前面涉及到的界面开发的编写方式。

class FileDestory(QWidget):
   def __init__(self):
       super(FileDestory, self).__init__()
       self.init_ui()

def init_ui(self):
       self.setWindowTitle('电脑垃圾清理器  公众号:[Python 集中营]')
       self.setWindowIcon(QIcon('垃圾桶.ico'))
       self.setFixedWidth(550)
       self.setFixedHeight(80)

self.process = QProgressBar()
       self.process.setRange(0, 5)

self.start_btn = QPushButton()
       self.start_btn.setText('开始清理')
       self.start_btn.clicked.connect(self.start_btn_click)

hbox = QHBoxLayout()
       hbox.addWidget(self.process)
       hbox.addWidget(self.start_btn)

self.thread_ = WorkThread(self)
       self.thread_.finished.connect(self.finished)
       self.thread_.exec_step.connect(self.set_step)

self.setLayout(hbox)

def start_btn_click(self):
       self.start_btn.setEnabled(False)
       self.thread_.start()

def finished(self, finished):
       if finished is True:
           self.start_btn.setText('清理已完成')
           self.start_btn.setEnabled(False)

def set_step(self, step):
       self.process.setValue(step)

创建工作子线程,所有关于电脑清理的操作都放在这个子线程中去执行,和主线程分离开来避免主线程直接卡死,因为主线程主要是用来处理UI界面相关的操作。

class WorkThread(QThread):
   # 定义好信号量用来向主线程中传递变量的变化信息,这样主线程就可以知道运行结果如何。

# 子线程是否执行完成的信号变量
   finished = pyqtSignal(bool)

# 子线程具体的步骤信号变量
   exec_step = pyqtSignal(int)

def __init__(self, parent=None):
       '''
       子线程类的初始化函数
       :param parent: UI界面类对象
       '''
       super(WorkThread, self).__init__(parent)
       self.working = True
       self.parent = parent

def __del__(self):
       '''
       线程执行是否需要进入等待过程
       :return:
       '''
       self.working = False
       self.wait()

def run(self):
       '''
       子线程主要执行逻辑的业务函数
       :return:
       '''
       file_type = {
           '.tmp': '临时文件',
           '._mp': '临时文件_mp',
           '.log': '日志文件',
           '.gid': '临时帮助文件',
           '.chk': '磁盘检查文件',
           '.old': '临时备份文件',
           '.xlk': 'Excel备份文件',
           '.bak': '临时备份文件bak'
       }

user_pro = os.environ['userprofile']

def del_file_and_dir(root):
           try:
               if os.path.isfile(root):
                   os.remove(root)
                   print("文件", root, "已经被移除!")
               elif os.path.isdir(root):
                   os.rmdir(root)
                   print("文件夹", root, "已经被移除!")

except WindowsError:
               print("该文件", root, "不能被移除!")

def init_size(b):
           try:
               kb = b // 1024
           except:
               print("传入字节格式不对")
               return "Error"
           if kb > 1024:
               M = kb // 1024
               if M > 1024:
                   G = M // 1024
                   return "%dG" % G
               else:
                   return "%dM" % M
           else:
               return "%dkb" % kb

class Clean(object):
           def __init__(self):
               self.del_info = {}
               self.del_file_paths = []
               self.total_size = 0
               for i, j in file_type.items():
                   self.del_info[i] = dict(name=j, count=0)

def count_files(self):
               for roots, dirs, files in os.walk(user_pro):
                   for files_item in files:
                       file_extension = os.path.splitext(files_item)[1]
                       if file_extension in self.del_info:
                           file_full_path = os.path.join(roots, files_item)
                           self.del_file_paths.append(file_full_path)
                           self.del_info[file_extension]['count'] += 1
                           self.total_size += os.path.getsize(file_full_path)

def show_del_files(self):
               re = init_size(self.total_size)
               for i in self.del_info:
                   print(self.del_info[i]["name"], "共计", self.del_info[i]["count"], "个")
               return re

def delete_files(self):
               for path in self.del_file_paths:
                   print('准备处理文件路径:', path)
                   del_file_and_dir(path)

self.exec_step.emit(1)
       clean = Clean()
       self.exec_step.emit(2)
       clean.count_files()
       self.exec_step.emit(3)
       re = clean.show_del_files()
       self.exec_step.emit(4)
       clean.delete_files()
       self.exec_step.emit(5)
       self.finished.emit(True)

将布局加入main函数主体循环中,启动整个应用。

if __name__ == '__main__':
   app = QApplication(sys.argv)
   main = FileDestory()
   main.show()
   sys.exit(app.exec_())

来源:https://www.cnblogs.com/lwsbc/p/16060901.html

标签:Python,电脑,垃圾文件
0
投稿

猜你喜欢

  • 使用Python中OpenCV和深度学习进行全面嵌套边缘检测

    2021-04-21 10:21:34
  • Oracle数据库的备份与恢复

    2010-07-28 12:52:00
  • MySQL prepare语句的SQL语法

    2024-01-20 03:14:08
  • python数据类型bytes 和 bytearray的使用与区别

    2021-08-26 05:51:48
  • php基础教程 php内置函数实例教程

    2023-11-14 18:28:45
  • Vue2.0实现购物车功能

    2023-07-02 16:54:22
  • Python、PyCharm安装及使用方法(Mac版)详解

    2021-04-19 22:45:42
  • javascript 打印内容方法小结

    2023-08-22 16:15:09
  • python_tkinter事件类型详情

    2021-11-29 10:09:30
  • 整理Python最基本的操作字典的方法

    2022-03-01 07:04:38
  • 对django 2.x版本中models.ForeignKey()外键说明介绍

    2022-10-07 18:18:24
  • 详解Go语言中泛型的实现原理与使用

    2024-02-06 08:30:15
  • sql server 2000阻塞和死锁问题的查看与解决方法

    2024-01-20 01:46:45
  • numpy之多维数组的创建全过程

    2023-06-22 03:58:03
  • Python正确重载运算符的方法示例详解

    2022-01-13 21:35:42
  • php链式操作mysql数据库(封装类带使用示例)

    2023-05-25 02:58:22
  • 详解MySQL数据类型int(M)中M的含义

    2024-01-14 03:07:05
  • 基于Python实现自动化生成数据报表

    2021-11-07 00:42:16
  • 用asp实现读取文件的最后一行的代码

    2011-03-08 10:55:00
  • Mysql子查询IN中使用LIMIT应用示例

    2024-01-27 01:44:17
  • asp之家 网络编程 m.aspxhome.com