Python實(shí)現(xiàn)自動(dòng)清理電腦垃圾文件詳解
經(jīng)常存在在我們的電腦中的垃圾文件主要是指系統(tǒng)在運(yùn)行過(guò)程中產(chǎn)生的tmp臨時(shí)文件、日志文件、臨時(shí)備份文件等。垃圾清理器的作用其實(shí)也是對(duì)這些文件進(jìn)行清理,不會(huì)影響到我們使用產(chǎn)生的數(shù)據(jù)文件。如果是手動(dòng)刪除的話要一個(gè)一個(gè)的找出來(lái)去刪除就比較麻煩了,用python寫一個(gè)腳本直接啟動(dòng)就大功告成了。

在這個(gè)腳本的實(shí)現(xiàn)過(guò)程中使用到的內(nèi)置庫(kù)就是os庫(kù),沒(méi)有通過(guò)其他的三方插件進(jìn)行實(shí)現(xiàn)。所以也不用下載其他的python模塊,直接調(diào)用內(nèi)置庫(kù)就OK了。
import os
因?yàn)槲覀兪褂媒缑婊奶幚?,這里導(dǎo)入一下pyqt5的模塊來(lái)實(shí)現(xiàn)UI界面布局。
from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * import sys
先將需要使用的UI界面編寫完成,還是使用前面涉及到的界面開(kāi)發(fā)的編寫方式。
class FileDestory(QWidget):
def __init__(self):
super(FileDestory, self).__init__()
self.init_ui()
def init_ui(self):
self.setWindowTitle('電腦垃圾清理器 公眾號(hào):[Python 集中營(yíng)]')
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('開(kāi)始清理')
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)
創(chuàng)建工作子線程,所有關(guān)于電腦清理的操作都放在這個(gè)子線程中去執(zhí)行,和主線程分離開(kāi)來(lái)避免主線程直接卡死,因?yàn)橹骶€程主要是用來(lái)處理UI界面相關(guān)的操作。
class WorkThread(QThread):
# 定義好信號(hào)量用來(lái)向主線程中傳遞變量的變化信息,這樣主線程就可以知道運(yùn)行結(jié)果如何。
# 子線程是否執(zhí)行完成的信號(hào)變量
finished = pyqtSignal(bool)
# 子線程具體的步驟信號(hào)變量
exec_step = pyqtSignal(int)
def __init__(self, parent=None):
'''
子線程類的初始化函數(shù)
:param parent: UI界面類對(duì)象
'''
super(WorkThread, self).__init__(parent)
self.working = True
self.parent = parent
def __del__(self):
'''
線程執(zhí)行是否需要進(jìn)入等待過(guò)程
:return:
'''
self.working = False
self.wait()
def run(self):
'''
子線程主要執(zhí)行邏輯的業(yè)務(wù)函數(shù)
:return:
'''
file_type = {
'.tmp': '臨時(shí)文件',
'._mp': '臨時(shí)文件_mp',
'.log': '日志文件',
'.gid': '臨時(shí)幫助文件',
'.chk': '磁盤檢查文件',
'.old': '臨時(shí)備份文件',
'.xlk': 'Excel備份文件',
'.bak': '臨時(shí)備份文件bak'
}
user_pro = os.environ['userprofile']
def del_file_and_dir(root):
try:
if os.path.isfile(root):
os.remove(root)
print("文件", root, "已經(jīng)被移除!")
elif os.path.isdir(root):
os.rmdir(root)
print("文件夾", root, "已經(jīng)被移除!")
except WindowsError:
print("該文件", root, "不能被移除!")
def init_size(b):
try:
kb = b // 1024
except:
print("傳入字節(jié)格式不對(duì)")
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"], "共計(jì)", self.del_info[i]["count"], "個(gè)")
return re
def delete_files(self):
for path in self.del_file_paths:
print('準(zhǔn)備處理文件路徑:', 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函數(shù)主體循環(huán)中,啟動(dòng)整個(gè)應(yīng)用。
if __name__ == '__main__':
app = QApplication(sys.argv)
main = FileDestory()
main.show()
sys.exit(app.exec_())
以上就是自動(dòng)清理電腦垃圾文件的全部代碼塊了,copy 到開(kāi)發(fā)工具中直接運(yùn)行即可。
到此這篇關(guān)于Python實(shí)現(xiàn)自動(dòng)清理電腦垃圾文件詳解的文章就介紹到這了,更多相關(guān)Python清理垃圾文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python開(kāi)發(fā)之pip安裝及使用方法詳解
這篇文章主要介紹了Python開(kāi)發(fā)之pip安裝及使用方法詳解,需要的朋友可以參考下2020-02-02
python matplotlib折線圖樣式實(shí)現(xiàn)過(guò)程
這篇文章主要介紹了python matplotlib折線圖樣式實(shí)現(xiàn)過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
如何在Python中利用matplotlib.pyplot畫出函數(shù)圖詳解
通過(guò)圖像可以直觀地學(xué)習(xí)函數(shù)變化、分布等規(guī)律,在學(xué)習(xí)函數(shù)、概率分布等方面效果顯著,下面這篇文章主要給大家介紹了關(guān)于如何在Python中利用matplotlib.pyplot畫出函數(shù)圖的相關(guān)資料,需要的朋友可以參考下2022-08-08
教你用python編寫腳本實(shí)現(xiàn)自動(dòng)簽到
這篇文章主要介紹了教你怎樣用python編寫腳本實(shí)現(xiàn)自動(dòng)簽到,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08

