利用python程式幫大家清理windows垃圾

來源:互聯網
上載者:User
前言

大家應該都有所體會,在windows系統使用久了就會產生一些“垃圾”檔案。這些檔案有的是程式的臨時檔案,有的是操作記錄或日誌等。垃圾隨著時間越積越多,導致可用空間減少,檔案片段過多,使得系統的運行速度受到一定影響。

而Mac系統和Linux系統並不存在這類問題,所以只適用於windows

知識概要

某些快取檔案可以提高程式的執行速度,比如緩衝 cookie、使用記錄 recent、預讀取 prefetch 等。所以清理臨時檔案並不代表系統運行就會變快,有時也可能變慢。

windows電腦中的垃圾檔案及檔案夾主要有哪些?

系統硬碟 %system% 下檔案類型:

【臨時檔案(*.tmp)】

【臨時檔案(*._mp)】

【記錄檔(*.log)】

【臨時協助檔案(*.gid)】

【磁碟檢查檔案(*.chk)】

【臨機操作備份檔案(*.old)】

【Excel備份檔案(*.xlk)】

【臨機操作備份檔案(*.bak)】

使用者目錄 %userprofile% 下檔案夾

【COOKIE】 cookies\*.*

【檔案使用記錄】 recent\*.*

【IE臨時檔案】 Temporary Internet Files\*.*

【臨時檔案檔案夾】 Temp\*.*

Windows 目錄 %windir% 下檔案夾

【預讀取資料檔案夾】 prefetch\*.*

【臨時檔案】 temp\*.*

擷取檔案地址

操作需要os模組,如擷取工作目錄:

import osprint os.getcwd() # 'E:\\PythonSource\\leanr_py'

切換工作目錄:

os.chdir('d://wamp')print os.getcwd() # 'd:\\wamp'

擷取系統硬碟符:

os.environ['systemdrive'] # 'C:'

擷取使用者目錄:

os.environ['userprofile'] # 'C:\\Users\\Administrator'

擷取 Windows 目錄:

os.environ['windir'] # 'C:\\Windows'

遍曆目錄

要想遍曆檔案夾,需要用到 os.walk(top,topdown=True,onerror=None)

參數top表示需要遍曆的頂級目錄的路徑。

參數topdown的預設值是“True”表示首先返回頂級目錄下的檔案,然後再遍曆子目錄中的檔案。當topdown的值為"False"時,表示先遍曆子目錄中的檔案,然後再返回頂級目錄下的檔案。

參數onerror預設值為"None",表示忽略檔案遍曆時的錯誤。如果不為空白,則提供一個自訂函數提示錯誤資訊後繼續遍曆或拋出異常中止遍曆。

傳回值:函數返回一個元組,含有三個元素。這三個元素分別是:每次遍曆的路徑名、路徑下子目錄列表、目錄下檔案清單。

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() 可以對檔案名稱進行切割

extension = os.path.splitext(r'aaa\bbb\ccc.ddd') # ('aaa\\bbb\\ccc', '.ddd')if extension[1] in ['.tmp', '.bak']: print '是垃圾檔案'

刪除檔案

刪除檔案與刪除檔案夾調用的是不同的函數。

# 刪除檔案os.remove('d:temporary/test/test.txt') # 刪除檔案夾os.rmdir('d:temporary/test/empty')

os.rmdir 只能刪除空檔案夾,如果檔案夾非空,則會報錯。所以應該用:

shutil.rmtree('d:/dir1/dir2/aaa')

檔案正在運行或者受到保護、當前賬戶沒有足夠許可權時,刪除會報錯。

最後整理刪除函數為:

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"

擷取檔案大小

# 顯示檔案夾(路徑)大小,單位 biteos.path.getsize('d://temporary/test') # 4096 # 檔案大小os.path.getsize('d://temporary/test/aaa.txt') # 135

完整程式

注意:由於牽涉到檔案刪除操作,請在動手前務必反覆確認代碼,萬一導致什麼重要檔案被刪.

務必確認!!!

務必確認!!!

務必確認!!!

import osimport jsonimport shutildel_extension = { '.tmp': '臨時檔案', '._mp': '臨時檔案_mp', '.log': '記錄檔', '.gid': '臨時協助檔案', '.chk': '磁碟檢查檔案', '.old': '臨機操作備份檔案', '.xlk': 'Excel備份檔案', '.bak': '臨機操作備份檔案bak'} del_userprofile = ['cookies', 'recent', 'Temporary Internet Files', 'Temp']del_windir = ['prefetch', 'temp'] # 擷取系統硬碟SYS_DRIVE = os.environ['systemdrive'] + '\\'# 擷取使用者目錄USER_PROFILE = os.environ['userprofile']# 擷取 Windows 目錄WIN_DIR = os.environ['windir'] # 擷取當前路徑 os.getcwd() 'E:\\Software\\Python27'# 跳轉至指定的檔案目錄 os.chdir('d://wamp')# 擷取系統硬碟符 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"  # 位元組bytes轉化kb\m\gdef formatSize(bytes): try:  bytes = float(bytes)  kb = bytes / 1024 except:  print("傳入的位元組格式不對")  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 為根目錄的分類樹,參數 topdown 設定展開方式從底層到頂層   for file_item in files:    # 擷取副檔名    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 '刪除可節省:%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()

總結

最近在看一些qt介面的內容。可以結合做一個有圖形介面的程式 。以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的協助,如果有疑問大家可以留言交流。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.