前言

大家应该都有所体会,在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,οnerrοr=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程序帮大家清理windows垃圾相关推荐

  1. excel python插件_利用 Python 插件 xlwings 读写 Excel

    Python 通过 xlwings 读取 Excel 数据 去年底公司让我做设备管理,多次委婉拒绝,最终还是做了.其实我比较喜欢技术.做管理后发现现场没有停机率统计,而原始数据有,每次要自己在Exce ...

  2. 利用python发送邮件_利用python实现简单的邮件发送客户端示例

    脚本过于简单,供学习和参考.主要了解一下smtplib库的使用和超时机制的实现.使用signal.alarm实现超时机制. #!/usr/bin/env python # -*- coding: ut ...

  3. 动态照片墙 python 实现_利用python生成照片墙的示例代码

    这篇文章主要介绍了利用python生成照片墙的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 PIL(Python Im ...

  4. python推荐_利用Python构建一个简单的推荐系统

    原标题:利用Python构建一个简单的推荐系统 摘要:快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫.在此之前读者需要对pandas和numpy等数据分析包有所了解. 什么 ...

  5. autocad支持python吗_利用python控制Autocad:pyautocad方式

    发现pyautocad模块:可以用python控制autocad的包.今天把文档中的重点内容摘录出来,以后绘图.计算大工程量.或者识别施工图的时候时候也许可以用到. 一.连接cad pyautocad ...

  6. python 搜索引擎_利用Python抓取搜索引擎结果

    前一段时间一直在研究如何用python抓取搜索引擎结果,在实现的过程中遇到了很多的问题,我把我遇到的问题都记录下来,希望以后遇到同样问题的童鞋不要再走弯路. 1. 搜索引擎的选取 选择一个好的搜索引擎 ...

  7. python 离散化_利用Python将数值型特征进行离散化操作的方法

    利用Python将数值型特征进行离散化操作的方法 如下所示: data = np.random.randn(20) factor = pd.cut(data,4) pd.get_dummies(fac ...

  8. 如何用python赚钱_利用python能怎么挣钱

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 6年python,期间写了各种奇葩爬虫,挣各种奇葩的钱,写这篇文章总结下几种爬虫 ...

  9. python 发送邮件_利用Python 发送邮件

    原标题:利用Python 发送邮件 概要 我们都知道SMTP(简单邮件传输协议),是一组用于从原地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式.SMTP规定电子邮件应该如何格式化.如何加密, ...

最新文章

  1. Codeforces 1103
  2. 趣学python3(21)-pygame-surface位置及角色移动
  3. c语言函数的形参有几个,C中子函数最多有几个形参
  4. 使用SpringBoot yml配置文件
  5. 信息安全工程师笔记-操作系统安全保护
  6. 设计模式学习笔记——装饰(Decorator)模式
  7. fpga 开源264编码_更好的开源安全性,学习编码,开放式家庭设计等
  8. 超详细步骤 | 如何用小程序 SDK 实现电商评价模
  9. yum挂在iso文件yum源配置
  10. 关于视频监控线缆的常识
  11. 解决: Mysql安装时mysqld.exe报`应用程序无法正常启动(0xc000007b)`的问题
  12. ExtJS笔记 Grids
  13. mapguide 2011
  14. 如何在vm虚拟机里面安装win10操作系统
  15. Application Transport Security has blocked a cleartext HTTP (http://) resource load since it is inse
  16. uniapp 腾讯云活体人脸核身(超详细)
  17. 每日加瓦,终成栋房3
  18. 让数据站住脚-浅谈用户研究中的信度与效度
  19. 一切相识,都是有缘人
  20. 超融合和服务器关系_什么是超融合服务器?与超融合一体机是一回事吗?

热门文章

  1. Java泛型教程–示例类,接口,方法,通配符等
  2. 使用工厂方法模式设计最佳实践
  3. Spring 3.1缓存和@Cacheable
  4. JavaOne 2012:掌握Java部署
  5. Java与iOS对话:Java对象与Apple plist序列化
  6. 十大最受欢迎的新Eclipse插件
  7. Linux 下如何查找 MySQL 数据库的数据根目录呢?
  8. Oracle 数据库的替代变量问题(即 set define off/on 的用法)
  9. 簇的局部变量中布尔类型_java基础2(变量、常量、数据类型)
  10. 乐高ev3搭建图_乐高EV3第一讲,Hello Ev3,搭建机甲战神模型