乐趣区

关于python:Python-自动清理电脑垃圾文件一键启动即可

常常存在在咱们的电脑中的垃圾文件次要是指零碎在运行过程中产生的 tmp 临时文件、日志文件、长期备份文件等。垃圾清理器的作用其实也是对这些文件进行清理,不会影响到咱们应用产生的数据文件。如果是手动删除的话要一个一个的找进去去删除就比拟麻烦了,用 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_())

以上就是主动清理电脑垃圾文件的全副代码块了,copy 到开发工具中间接运行即可。

【往期精选】

有了 jmespath,解决 python 中的 json 数据就变成了一种享受 …

解锁一个新技能,如何在 Python 代码中应用表情包 …

万能的 list 列表,python 中的堆栈、队列实现全靠它!

该怎么用 pyqt5 来实现数据的增、删、改、查性能 …

介绍一个文本语音神器,几行代码就能搞定!

python 批量主动整顿文件

初学者福利:分享五个收费的 Python 学习网站,放松珍藏吧!

乏味的控制台玩法:一行代码绘制控制台图像!

数据处理小工具:Excel 批量数据文件拆分 / 整合器 …

办公自动化:PDF 文件合并器,将多个 PDF 文件进行合并 …

GUI 猜数字游戏,间接开玩 …

手把手教你做一个数据图表生成器(附源码)…

退出移动版