Python实现自动清理电脑垃圾文件详解
作者:Python?集中营 发布时间:2023-05-18 00:50:22
标签: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_())
来源:https://www.cnblogs.com/lwsbc/p/16060901.html


猜你喜欢
- 你可能会遇到这样的要求,一个脚本,只允许有一个实例。在python中,为了实现这个需求,可以引入fcntl模块对文件加一个排他锁,这样一来,
- SQL Server 2000 清理日志精品教程SQL Server 2000 数据库日志太大!如何清理SQL Server 2000的日志
- 接上一篇内容:https://www.jb51.net/article/249934.htm一、聚簇索引其实之前内容中介绍的 B+ 树就是聚
- 本文实例讲述了Python存取XML的常见方法。分享给大家供大家参考,具体如下:目前而言,Python 3.2存取XML有以下四种方法:1.
- 基础知识在学习该漏洞之前我们需要学习一下前置知识来更好的理解该漏洞的产生原因以及如何利用。 我们先来学习一下框架的基本信息以及反序列化漏洞的
- 前言在编程过程中,我们经常会用到与时间和日期相关的各种需求,下面来介绍 Go 语言中有关时间的一些基本用法。时间类型time.Time 类型
- 代码如下:declare @Q_ID uniqueidentifier set @Q_ID = dbo.uf_GetParamValueBy
- 我就废话不多说了,大家还是直接看代码吧~package mainimport ( "net/http")func mai
- DateTimeField日期+时间。与python里的 datetime.datetime 实例同。比如,数据库字段内容为2018-08-
- 前言pygame中的精灵碰撞是可见游戏中用的最基础的东西,这里结合官方文档和小甲鱼的网站上的内容做个小总结,方便日后使用。pygame.sp
- 核心代码--下面我演示下MySQL中的排序列的实现--测试数据CREATE TABLE tb(score INT);INSERT tb SE
- PHP有一组进程控制函数(编译时需要–enable-pcntl与posix扩展),使得php能实现跟c
- 不知道有没有人碰到过这样恶心的问题:两张表连接查询并limit,SQL效率很高,但是加上order by以后,语句的执行时间变的巨长,效率巨
- 之前跟一些小伙伴有个讨论:大概就是很多跟数据打交道的朋友都面对过很复杂的excel公式,有时嵌套层数特别多,肉眼观看很容易蒙圈。有了这样的需
- 函数内省(function introspection)除了__doc__属性, 函数对象还有很多属性,对于下面的函数,可以使用dir()查
- 在用JS编写动画的时候,经常用会到布局转换,即在运动前将相对定位转为绝对定位,然后执行动画函数。下面给大家分享一个运用原生JS实现的布局转换
- 一、概述推荐使用参考网站: json在python中,json模块可以实现json数据的序列化和反序列化序列化:将可存放在内存中的pytho
- 读文件:要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符:>>> f = op
- 在windows 2003下,在运行web应用程序的时候出现一下错误: 服务器无法处理请求,-->对路径“C:/temp/mytest.tx
- 本文实例讲述了python多线程高级锁condition简单用法。分享给大家供大家参考,具体如下:多线程编程中如果使用Condition对象