前言
大家应该都有所体会,在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 os print 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"
获取文件大小
# 显示文件夹(路径)大小,单位 bite os.path.getsize('d://temporary/test') # 4096 # 文件大小 os.path.getsize('d://temporary/test/aaa.txt') # 135
完整程序
注意:由于牵涉到文件删除操作,请在动手前务必反复确认代码,万一导致什么重要文件被删.
务必确认!!!
务必确认!!!
务必确认!!!
import os import json import shutil del_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\g def 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界面的内容。可以结合做一个有图形界面的程序 。以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]