關(guān)于電腦的垃圾清理操作,已經(jīng)有很多的成熟的軟件可以幫助我們完成C盤的垃圾清理操作,比如360等等。
但是使用三方的清理軟件往往伴隨著很多的廣告,而且很多離線情況下并不允許安裝這樣的三方軟件工具。
如果直接需要exe的C盤清理器可直接前往文末下載該工具。
作為程序猿,自己動手才能豐衣足食,于是想著何不使用python制作一個簡易的C盤清理工具徹底擺脫系統(tǒng)盤日益膨脹的煩惱呢?
關(guān)于python的文件清理操作,實(shí)際上我們使用標(biāo)準(zhǔn)模塊os即可滿足所有的文件操作。
一般在C盤的清理過程中,我們能夠清理的文件類型主要如下:
'''
'.tmp': '臨時文件',
'._mp': '臨時文件_mp',
'.log': '日志文件',
'.gid': '臨時幫助文件',
'.chk': '磁盤檢查文件',
'.old': '臨時備份文件',
'.xlk': 'Excel備份文件',
'.bak': '臨時備份文件bak'
'''
既然已經(jīng)知道了需要清理的文件類型,那實(shí)現(xiàn)思路就是將這些文件找出來后刪除掉即可。
將我們接下來代碼塊中使用到的os標(biāo)準(zhǔn)模塊直接導(dǎo)入到代碼塊中。
# Importing the os module.
import os
現(xiàn)在可以將一些全局變量首先定義好,比如全局的系統(tǒng)操作路徑、待清理的文件后綴名等等。
# 待清理的文件后綴名稱
suffix_dict = {
'.tmp': '臨時文件',
'._mp': '臨時文件_mp',
'.log': '日志文件',
'.gid': '臨時幫助文件',
'.chk': '磁盤檢查文件',
'.old': '臨時備份文件',
'.xlk': 'Excel備份文件',
'.bak': '臨時備份文件bak'
}
# 用戶緩存數(shù)據(jù)類型名稱
user_profile_list = [
'cookies', 'recent', 'Temporary Internet Files', 'Temp'
]
# windows系統(tǒng)路徑文件類型
windir_list = [
'prefetch', 'temp'
]
# 系統(tǒng)驅(qū)動路徑
sys_drive = os.environ['systemdrive'] + '\\'
# 用戶緩存路徑
user_profile = os.environ['userprofile']
# windows系統(tǒng)路徑
win_dir = os.environ['windir']
以上相關(guān)的C盤清理的全局變量已經(jīng)設(shè)置完成了,接下來我們創(chuàng)建一個ClaenFilesUtil的類來完成對文件清理的業(yè)務(wù)操作過程。
# This class is used to clean up files in a directory
class CleanFilesUtil():
def __init__(self):
"""
A constructor. It is called when an object is created from a class and it allows the class to initialize the
attributes of a class.
"""
self.del_info = {}
self.del_file_paths = []
self.total_size = 0
for suffix_name, comment in suffix_dict.items():
self.del_info[suffix_name] = dict(name=comment, count=0)
def scanf_files(self):
"""
It takes a list of files, and returns a list of lists of the lines in each file
"""
for roots, dirs, files in os.walk(user_profile):
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_count_message(self):
"""
It prints the number of messages in the inbox.
"""
byte = self.format_size(self.total_size)
for i in self.del_info:
print(self.del_info[i]["name"], "共計", self.del_info[i]["count"], "個")
return byte
def format_size(self, byte):
"""
It takes a number of bytes and returns a string with the number of bytes, kilobytes, megabytes, or gigabytes,
depending on the size
:param byte: The size in bytes
"""
try:
kb = byte // 1024
except:
print("傳入字節(jié)格式不對")
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
def remove_file_or_dir(self):
"""
> This function removes a file or directory
"""
for full_path_one in self.del_file_paths:
try:
if os.path.isfile(full_path_one):
os.remove(full_path_one)
print("文件:", full_path_one, "已移除")
elif os.path.isdir(full_path_one):
os.rmdir(full_path_one)
print("文件夾", full_path_one, "已移除")
except WindowsError:
print("錯誤:", full_path_one, "不能被移除")
if __name__ == "__main__":
print("開始初始化C盤清理程序")
clean_ = CleanFilesUtil()
print('C盤清理程序初始化完成')
print("開始掃描所有待清理文件路徑")
clean_.scanf_files()
print("完成所有待清理文件路徑掃描")
print("掃描完成以下是需要待清理的文件路徑:")
clean_.show_count_message()
print("開始執(zhí)行C盤垃圾文件刪除")
clean_.remove_file_or_dir()
print("所有C盤垃圾文件已清理完成")
input("輸入任意鍵關(guān)閉窗口...")
以上就是所有C盤垃圾清理的主要程序業(yè)務(wù)代碼了,但是為了將該清理工具設(shè)置成定時任務(wù)去執(zhí)行。
于是,我想到了前幾天發(fā)布的文章[python不要再使用while死循環(huán),使用定時器代替效果更佳!],可以通過定時器的方式來滿足業(yè)務(wù)要求。
除了使用代碼塊來完成定時還可以通過配置windows或其他操作系統(tǒng)的定時任務(wù)來完成定時執(zhí)行的需求。
最后,為了方便沒有python基礎(chǔ)的小伙伴可以直接使用該工具,我將其打包成了exe應(yīng)用程序。