在項目開發過程中,不可避免的會碰到需要強制增加審計日誌的需求,那具體如何做呢,本文將告訴你答案! ...
經常存在在我們的電腦中的垃圾文件主要是指系統在運行過程中產生的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猜數字游戲,直接開玩...
手把手教你做一個數據圖表生成器(附源碼)...
歡迎關註作者公眾號【Python 集中營】,專註於後端編程,每天更新技術乾貨,不定時分享各類資料!