脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - Python实现自动清理电脑垃圾文件详解

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

2022-11-14 10:06Python 集中营 Python

经常存在在我们的电脑中的垃圾文件主要是指系统在运行过程中产生的tmp临时文件、日志文件、临时备份文件等。本文将利用Python实现自动清理这些垃圾文件,需要的可以参考一下

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

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

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

?
1
import os

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

?
1
2
3
4
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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界面相关的操作。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
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函数主体循环中,启动整个应用。

?
1
2
3
4
5
if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = FileDestory()
    main.show()
    sys.exit(app.exec_())

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

到此这篇关于Python实现自动清理电脑垃圾文件详解的文章就介绍到这了,更多相关Python清理垃圾文件内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.cnblogs.com/lwsbc/p/16060901.html

延伸 · 阅读

精彩推荐
  • PythonPython二分查找详解

    Python二分查找详解

    这篇文章主要给大家汇总介绍了Python二分查找的几种实现的方法,有需要的小伙伴可以参考下。...

    脚本之家6042020-07-31
  • PythonPython中文分词工具之结巴分词用法实例总结【经典案例】

    Python中文分词工具之结巴分词用法实例总结【经典案例】

    这篇文章主要介绍了Python中文分词工具之结巴分词用法,结合实例形式总结分析了Python针对中文文件的读取与分词操作过程中遇到的问题与解决方法,需要的...

    捂汗县长8012020-09-29
  • Pythonpython编程PyQt5创建按钮及触发点击事件示例解析

    python编程PyQt5创建按钮及触发点击事件示例解析

    这篇文章主要为大家介绍了python编程使用PyQt5如何创建按钮及触发点击事件的示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进...

    勤奋的大熊猫7272022-02-20
  • Python解决使用pandas聚类时的小坑

    解决使用pandas聚类时的小坑

    这篇文章主要介绍了解决使用pandas聚类时的小坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    填坑小霸王9912021-10-04
  • PythonPython3 XML 获取雅虎天气的实现方法

    Python3 XML 获取雅虎天气的实现方法

    下面小编就为大家分享一篇Python3 XML 获取雅虎天气的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    mabing99311612021-01-11
  • Python基于Python获取照片的GPS位置信息

    基于Python获取照片的GPS位置信息

    这篇文章主要介绍了基于Python获取照片的GPS位置信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以...

    慕尘5392020-04-09
  • PythonDjango REST framework 限流功能的使用

    Django REST framework 限流功能的使用

    DRF常用功能的案例基本用法都有讲解,关于限流(Throttling)这个功能其实在真实的业务场景中能真正用到的其实不算多。今天说这个话题其实一方面是讨论...

    火腿蛋炒饭4102021-12-08
  • PythonPython 给定的经纬度标注在地图上的实现方法

    Python 给定的经纬度标注在地图上的实现方法

    今天小编就为大家分享一篇Python 给定的经纬度标注在地图上的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    非典型废言14242021-08-01