經(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寫(xiě)一個(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了。
因?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界面編寫(xiě)完成,還是使用前面涉及到的界面開(kāi)發(fā)的編寫(xiě)方式。
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) : ''' 子線程類(lèi)的初始化函數(shù) :param parent: UI界面類(lèi)對(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' : '磁盤(pán)檢查文件' , '.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)行即可。
「Python 集中營(yíng)」 ,只做知識(shí)分享 !
點(diǎn)個(gè)“在看”每天收到最新消息!