国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2019-11-25 16:24:25
字體:
來源:轉載
供稿:網友

前言

大家應該都有所體會,在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界面的內容。可以結合做一個有圖形界面的程序 。以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洛阳市| 修水县| 东丽区| 永城市| 即墨市| 闸北区| 沽源县| 兰溪市| 广河县| 赤城县| 长岛县| 宜兰市| 新晃| 徐水县| 大田县| 鹤峰县| 溆浦县| 德惠市| 阿拉尔市| 藁城市| 紫阳县| 万盛区| 迁安市| 宜丰县| 冕宁县| 华蓥市| 陆丰市| 肥东县| 小金县| 前郭尔| 岫岩| 漾濞| 噶尔县| 前郭尔| 青神县| 繁昌县| 安新县| 光山县| 凉城县| 牙克石市| 石渠县|