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


Posted in Python onJanuary 15, 2017

前言

大家应该都有所体会,在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界面的内容。可以结合做一个有图形界面的程序 。以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
Python统计列表中的重复项出现的次数的方法
Aug 18 Python
python常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
Aug 25 Python
Python压缩解压缩zip文件及破解zip文件密码的方法
Nov 04 Python
Python小工具之消耗系统指定大小内存的方法
Dec 03 Python
Flask之请求钩子的实现
Dec 23 Python
对python 判断数字是否小于0的方法详解
Jan 26 Python
Python内置random模块生成随机数的方法
May 31 Python
对python 中re.sub,replace(),strip()的区别详解
Jul 22 Python
Flask框架模板渲染操作简单示例
Jul 31 Python
Django 设置多环境配置文件载入问题
Feb 25 Python
Pycharm编辑器功能之代码折叠效果的实现代码
Oct 15 Python
python判断all函数输出结果是否为true的方法
Dec 03 Python
Python科学计算之NumPy入门教程
Jan 15 #Python
Python科学计算之Pandas详解
Jan 15 #Python
使用pyecharts无法import Bar的解决方案
Apr 23 #Python
详解Python3中字符串中的数字提取方法
Jan 14 #Python
win7上python2.7连接mysql数据库的方法
Jan 14 #Python
python实现字符串连接的三种方法及其效率、适用场景详解
Jan 13 #Python
python实现读取并显示图片的两种方法
Jan 13 #Python
You might like
一棵php的类树(支持无限分类)
2006/10/09 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
2012/08/08 PHP
PHP提交表单失败后如何保留已经填写的信息
2014/06/20 PHP
php对xml文件的增删改查操作实现方法分析
2017/05/19 PHP
PHP实现数据库的增删查改功能及完整代码
2018/04/18 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
Javascript实现的鼠标经过时播放声音
2010/05/18 Javascript
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
通过node-mysql搭建Windows+Node.js+MySQL环境的教程
2016/03/01 Javascript
JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别
2016/05/31 Javascript
D3.js实现散点图和气泡图的方法详解
2016/09/21 Javascript
基于touch.js手势库+zepto.js插件开发图片查看器(滑动、缩放、双击缩放)
2016/11/17 Javascript
微信小程序开发之视频播放器 Video 弹幕 弹幕颜色自定义实例
2016/12/08 Javascript
如何优雅地在vue中添加权限控制示例详解
2019/03/07 Javascript
使用jQuery实现掷骰子游戏
2019/10/24 jQuery
Python中的探索性数据分析(功能式)
2017/12/22 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
2019/11/28 Python
对tensorflow中的strides参数使用详解
2020/01/04 Python
Python grequests模块使用场景及代码实例
2020/08/10 Python
Python爬虫之Selenium下拉框处理的实现
2020/12/04 Python
Html5自定义字体解决方法
2019/10/09 HTML / CSS
Html5 webRTC简单实现视频调用的示例代码
2020/09/23 HTML / CSS
成功的酒店创业计划书
2013/12/27 职场文书
电脑销售顾问自荐信
2014/01/29 职场文书
优秀实习生感言
2014/03/01 职场文书
培训讲师岗位职责
2014/04/13 职场文书
初中优秀班集体申报材料
2014/05/01 职场文书
优秀教导主任事迹材料
2014/05/09 职场文书
李培根演讲稿
2014/05/22 职场文书
关于保护环境的标语
2014/06/09 职场文书
工地门卫岗位职责范本
2014/07/01 职场文书
2014年商场国庆节活动策划方案
2014/09/16 职场文书
劳动模范获奖感言
2015/07/31 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers
MySQL数据库实验之 触发器和存储过程
2022/06/21 MySQL