利用python程序幫大家清理windows垃圾
前言
大家應(yīng)該都有所體會(huì),在windows系統(tǒng)使用久了就會(huì)產(chǎn)生一些“垃圾”文件。這些文件有的是程序的臨時(shí)文件,有的是操作記錄或日志等。垃圾隨著時(shí)間越積越多,導(dǎo)致可用空間減少,文件碎片過(guò)多,使得系統(tǒng)的運(yùn)行速度受到一定影響。
而Mac系統(tǒng)和Linux系統(tǒng)并不存在這類問(wèn)題,所以只適用于windows
知識(shí)概要
某些緩存文件可以提高程序的執(zhí)行速度,比如緩存 cookie、使用記錄 recent、預(yù)讀取 prefetch 等。所以清理臨時(shí)文件并不代表系統(tǒng)運(yùn)行就會(huì)變快,有時(shí)也可能變慢。
windows電腦中的垃圾文件及文件夾主要有哪些?
系統(tǒng)盤 %system% 下文件類型:
【臨時(shí)文件(*.tmp)】
【臨時(shí)文件(*._mp)】
【日志文件(*.log)】
【臨時(shí)幫助文件(*.gid)】
【磁盤檢查文件(*.chk)】
【臨時(shí)備份文件(*.old)】
【Excel備份文件(*.xlk)】
【臨時(shí)備份文件(*.bak)】
用戶目錄 %userprofile% 下文件夾
【COOKIE】 cookies\*.*
【文件使用記錄】 recent\*.*
【IE臨時(shí)文件】 Temporary Internet Files\*.*
【臨時(shí)文件文件夾】 Temp\*.*
Windows 目錄 %windir% 下文件夾
【預(yù)讀取數(shù)據(jù)文件夾】 prefetch\*.*
【臨時(shí)文件】 temp\*.*
獲取文件地址
操作需要os模塊,如獲取工作目錄:
import os print os.getcwd() # 'E:\\PythonSource\\leanr_py'
切換工作目錄:
os.chdir('d://wamp') print os.getcwd() # 'd:\\wamp'
獲取系統(tǒng)盤符:
os.environ['systemdrive'] # 'C:'
獲取用戶目錄:
os.environ['userprofile'] # 'C:\\Users\\Administrator'
獲取 Windows 目錄:
os.environ['windir'] # 'C:\\Windows'
遍歷目錄
要想遍歷文件夾,需要用到 os.walk(top,topdown=True,onerror=None)
- 參數(shù)top表示需要遍歷的頂級(jí)目錄的路徑。
- 參數(shù)topdown的默認(rèn)值是“True”表示首先返回頂級(jí)目錄下的文件,然后再遍歷子目錄中的文件。當(dāng)topdown的值為"False"時(shí),表示先遍歷子目錄中的文件,然后再返回頂級(jí)目錄下的文件。
- 參數(shù)onerror默認(rèn)值為"None",表示忽略文件遍歷時(shí)的錯(cuò)誤。如果不為空,則提供一個(gè)自定義函數(shù)提示錯(cuò)誤信息后繼續(xù)遍歷或拋出異常中止遍歷。
- 返回值:函數(shù)返回一個(gè)元組,含有三個(gè)元素。這三個(gè)元素分別是:每次遍歷的路徑名、路徑下子目錄列表、目錄下文件列表。
for roots, dirs, files in os.walk('d://wamp', topdown=False) # roots 文件夾路徑, dirs 該目錄下的文件夾列表, files文件列表 print roots # d://wamp print dirs # ['bin', 'www', 'alias'] print files # ['wampmanage.conf', '1.txt']
判斷是否垃圾文件
os.path.splitext()
可以對(duì)文件名進(jìn)行切割
extension = os.path.splitext(r'aaa\bbb\ccc.ddd') # ('aaa\\bbb\\ccc', '.ddd') if extension[1] in ['.tmp', '.bak']: print '是垃圾文件'
刪除文件
刪除文件與刪除文件夾調(diào)用的是不同的函數(shù)。
# 刪除文件 os.remove('d:temporary/test/test.txt') # 刪除文件夾 os.rmdir('d:temporary/test/empty')
os.rmdir 只能刪除空文件夾,如果文件夾非空,則會(huì)報(bào)錯(cuò)。所以應(yīng)該用:
shutil.rmtree('d:/dir1/dir2/aaa')
文件正在運(yùn)行或者受到保護(hù)、當(dāng)前賬戶沒(méi)有足夠權(quán)限時(shí),刪除會(huì)報(bào)錯(cuò)。
最后整理刪除函數(shù)為:
def del_dir_or_file(root): try: if os.path.isfile(root): # 刪除文件 os.remove(root) print 'file: ' + root + ' removed' elif os.path.isdir(root): # 刪除文件夾 shutil.rmtree(root) print 'directory: ' + root + ' removed' except WindowsError: print 'failure: ' + root + " can't remove"
獲取文件大小
# 顯示文件夾(路徑)大小,單位 bite os.path.getsize('d://temporary/test') # 4096 # 文件大小 os.path.getsize('d://temporary/test/aaa.txt') # 135
完整程序
注意:由于牽涉到文件刪除操作,請(qǐng)?jiān)趧?dòng)手前務(wù)必反復(fù)確認(rèn)代碼,萬(wàn)一導(dǎo)致什么重要文件被刪.
務(wù)必確認(rèn)?。?!
務(wù)必確認(rèn)!??!
務(wù)必確認(rèn)?。?!
import os import json import shutil del_extension = { '.tmp': '臨時(shí)文件', '._mp': '臨時(shí)文件_mp', '.log': '日志文件', '.gid': '臨時(shí)幫助文件', '.chk': '磁盤檢查文件', '.old': '臨時(shí)備份文件', '.xlk': 'Excel備份文件', '.bak': '臨時(shí)備份文件bak' } del_userprofile = ['cookies', 'recent', 'Temporary Internet Files', 'Temp'] del_windir = ['prefetch', 'temp'] # 獲取系統(tǒng)盤 SYS_DRIVE = os.environ['systemdrive'] + '\\' # 獲取用戶目錄 USER_PROFILE = os.environ['userprofile'] # 獲取 Windows 目錄 WIN_DIR = os.environ['windir'] # 獲取當(dāng)前路徑 os.getcwd() 'E:\\Software\\Python27' # 跳轉(zhuǎn)至指定的文件目錄 os.chdir('d://wamp') # 獲取系統(tǒng)盤符 os.environ['systemdrive'] 'C:' # 獲取用戶目錄 os.environ['userprofile'] 'C:\\Users\\Administrator' # 獲取 Windows 目錄 os.environ['windir'] 'C:\\Windows' def del_dir_or_file(root): try: if os.path.isfile(root): # 刪除文件 os.remove(root) print 'file: ' + root + ' removed' elif os.path.isdir(root): # 刪除文件夾 shutil.rmtree(root) print 'directory: ' + root + ' removed' except WindowsError: print 'failure: ' + root + " can't remove" # 字節(jié)bytes轉(zhuǎn)化kb\m\g def formatSize(bytes): try: bytes = float(bytes) kb = bytes / 1024 except: print("傳入的字節(jié)格式不對(duì)") return "Error" if kb >= 1024: M = kb / 1024 if M >= 1024: G = M / 1024 return "%fG" % (G) else: return "%fM" % (M) else: return "%fkb" % (kb) class DiskClean(object): def __init__(self): self.del_info = {} self.del_file_paths = [] self.total_size = 0 for k,v in del_extension.items(): self.del_info[k] = dict(name = v, count = 0) def scan(self): for roots, dirs, files in os.walk(USER_PROFILE, topdown=False): # 生成并展開以 root 為根目錄的目錄樹,參數(shù) topdown 設(shè)定展開方式從底層到頂層 for file_item in files: # 獲取擴(kuò)展名 file_extension = os.path.splitext(file_item)[1] # print os.path.join(roots, file_item) if file_extension in self.del_info: # 文件完整路徑 file_full_path = os.path.join(roots, file_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(self): print json.dumps(self.del_info, indent=4, ensure_ascii=False) print '刪除可節(jié)省:%s 空間' % formatSize(self.total_size) def delete_files(self): for i in self.del_file_paths: del_dir_or_file(i) if __name__ == '__main__': cleaner = DiskClean() cleaner.scan() cleaner.show() if_del = raw_input('是否刪除y/n:') if if_del == 'y': cleaner.delete_files()
總結(jié)
最近在看一些qt界面的內(nèi)容??梢越Y(jié)合做一個(gè)有圖形界面的程序 。以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。
相關(guān)文章
python模擬菜刀反彈shell繞過(guò)限制【推薦】
這篇文章主要介紹了利用python模擬菜刀反彈shell繞過(guò)限制,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06使用Python pyWinAuto庫(kù)自動(dòng)化Windows任務(wù)的示例代碼
pywinauto是Python的一個(gè)強(qiáng)大的自動(dòng)化庫(kù),它可以用于控制Windows應(yīng)用程序的用戶界面,本文將詳細(xì)介紹pywinauto庫(kù)的安裝、基本用法和高級(jí)應(yīng)用,以便你能夠更好地了解如何使用它來(lái)自動(dòng)化Windows應(yīng)用程序,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2023-11-11如何解決Python讀取圖片路徑存在轉(zhuǎn)義字符的問(wèn)題
這篇文章主要為大家詳細(xì)介紹了如何解決Python讀取圖片路徑時(shí)存在轉(zhuǎn)義字符的問(wèn)題,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下2023-07-07python2.7使用scapy發(fā)送syn實(shí)例
這篇文章主要介紹了python2.7使用scapy發(fā)送syn實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05Python實(shí)現(xiàn)PS圖像抽象畫風(fēng)效果的方法
這篇文章主要介紹了Python實(shí)現(xiàn)PS圖像抽象畫風(fēng)效果的方法,涉及Python基于skimage模塊進(jìn)行圖像處理的相關(guān)操作技巧,需要的朋友可以參考下2018-01-01python對(duì)指定目錄下文件進(jìn)行批量重命名的方法
這篇文章主要介紹了python對(duì)指定目錄下文件進(jìn)行批量重命名的方法,涉及Python中replace及join方法的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04