还你系统空间的 Python 小程序

简介: Windows 系统用久了,磁盘中就会产生大量的“垃圾”文件。这些文件有的是程序使用过的临时文件,有的是操作记录和日志信息等。因为往往不能被有效地清理干净,越积越多,导致用户的可用空间越来越小。同时也会因为碎片文件过多,使得系统的运行速度受到一定影响。


Windows 系统用久了,磁盘中就会产生大量的“垃圾”文件。这些文件有的是程序使用过的临时文件,有的是操作记录和日志信息等。因为往往不能被有效地清理干净,越积越多,导致用户的可用空间越来越小。同时也会因为碎片文件过多,使得系统的运行速度受到一定影响。


像我这种强迫症用户显然受不了这种状况,定期清理垃圾文件很有必要。


对于 Windows 系统,网上有一些现成的垃圾文件清理脚本。不过作为一个 Python 学习者,当然要自己动手来实现一个才合理嘛。


Python 的 os 模块,提供了较为丰富的处理系统文件与路径的函数。下面我们就靠它,来实现一个自己的磁盘清理小程序。


动手前的友情提示:

  • 本文附带代码运行环境为 WIN7 + Python 2.7。
  • 某些缓存文件可以提高程序的执行速度,比如缓存 cookie、使用记录 recent、预读取 prefetch 等。所以清理临时文件并不代表系统运行就会变快,有时也可能变慢。
  • 由于牵涉到文件删除操作,请在动手前务必反复确认代码,万一导致什么重要文件被删,本人可概不负责啊。别问我为什么要这么说,写了好几天的代码在调试时被误删了,我再去哭一会儿……(;´༎ຶД༎ຶ`)


言归正传,电脑中的垃圾文件及文件夹主要有下面几类:


系统盘 %system% 下文件类型:
【临时文件(*.tmp)】
【临时文件(*._mp)】
【日志文件(*.log)】
【临时帮助文件(*.gid)】
【磁盘检查文件(*.chk)】
【临时备份文件(*.old)】
【Excel备份文件(*.xlk)】
【临时备份文件(*.bak)】
--------------------------------
用户目录 %userprofile% 下文件夹
【COOKIE】 cookies\*.*
【文件使用记录】 recent\*.*
【IE临时文件】 Temporary Internet Files\*.*
【临时文件文件夹】 Temp\*.*
--------------------------------
Windows 目录 %windir% 下文件夹
【预读取数据文件夹】 prefetch\*.*
【临时文件】 temp\*.*


如果你了解自己使用的软件产生的其它垃圾文件,也可以添加至待删除的列表上。


与我们直接在 Windows 可视化窗口删除文件或文件夹类似,使用 Python 清理磁盘大致亦可分为 获取文件地址判断垃圾文件删除垃圾文件和文件夹 三步:


1. 获取文件地址


在可视化窗口中,我们点击每个文件夹的图标,打开不同文件夹,可以看见窗口的地址栏也随之切换到了对应的目录下,在 Python  os 模块中,同样是根据文件地址来查找文件,相应的函数如下:


获取当前目录路径


>>> import os
>>> os.getcwd()
'E:\\Software\\Python27'


跳转至指定的文件目录


>>> os.chdir('d://temporary')
>>> os.getcwd()
'd:\\temporary'


获取系统盘符


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


获取用户目录


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


获取 Windows 目录


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


调用 os.environ 函数得到字典格式的系统环境映射表,通过关键字可以很方便地得到我们想要的地址。


使用 os.walk 函数,可生成并展开以指定目录为根目录的目录树。


参数 topdown 指定展开方式是否从顶层到底层

all_info = os.walk('d:\\temporary\\', topdown=False)

os.walk() 函数一般配合如下的 for 循环使用,遍历目录树中每一层的根目录 roots,子目录 dirs 以及文件 files,并将值储存在对应的变量中:

for roots, dirs, files in all_info:  

   ...


例如,对于 D 盘下根目录 AAA 目录树展开如下:


用 walk 函数遍历并输出后,结果如下:


将两个给定的目录进行组合


>>> os.path.join('d:\\', 'temporary')
'd:\\temporary'


用 join 函数,配合 walk 函数得到的根目录与文件名,就能组合出我们想要的文件地址了。


2. 判断垃圾文件


我们现在已知垃圾文件的扩展名(以及垃圾文件夹名),通过 walk 函数与 join 函数也得到了完整的文件名,要判断文件是不是垃圾文件,可以用正则表达式进行匹配判断,正则表达式还不牢固的同学请移步 【Python 第55课】 正则表达式(1)


如果对正则表达式的语法深感头疼,os 模块也有提供其它解决方案:


>>> os.path.splitext(r'aaa\bbb\ccc.ddd')
('aaa\\bbb\\ccc', '.ddd')


os.path.splitext 函数可以将文件的文件名与扩展名进行分离,并返回一个包含文件名与扩展名的二元元组。


得到了文件的扩展名,我们可以用 ‘in’ 来 判断该扩展名是否在需要删除的扩展名列表中:


extension = os.path.splitext(r'aaa\bbb\ccc.ddd')
extension_to_del = ['.aaa', '.bbb', '.ccc', '.ddd']
if extension[1] in extension_to_del:
    # to be deleted


这里可能会踩到的一个坑是字符“\”,它既是 Windows 路径的分隔符,又是 Python 字符串中的转义符。在处理路径时,需要额外注意。


3. 删除文件


使用 os 模块删除数据有三点需要注意:


其一,删除文件与删除文件夹调用的是不同的函数。

删除文件

os.remove('d:temporary/test/test.txt')

删除文件夹

os.rmdir('d:temporary/test/empty')

如果你在尝试调用这个代码删除文件/文件夹时无效,确认下文件名是否带有中文、空格和特殊符号。建议先在纯英文的简单路径下调试成功再说。


无法删除的还有一个常见原因是另一个要注意的地方:


其二,os.rmdir 只能删除空文件夹,如果文件夹非空,则会报错。


所以,如果要把匹配到的垃圾文件夹整个删除,可能我们不得不选择先把文件夹中的所有文件全部删除,再从最内层文件夹开始往外逐层删除。这实在是挺麻烦的,那有没有其它解决方案呢?


有,但要依靠 os 以外的帮助。


import shutil
shutil.rmtree('d:/temporary/test/aaa')


上面的解决办法是引用另外一个模块 shutil 的函数来删除非空文件夹,其实,这个外部引用的函数还是用 os 模块的函数来写的,想挑战的话,也可以自己写一个试试。


当然,直接调用 cmd 命令也是极好的:

os.system('rd/s/q "d:temporary/test"')

注意,整个命令是一个字符串,其中目录地址要额外加引号。

在某些情况下,尤其是当前有较多其它程序在运行时,即使用 shutil.rmtree 函数仍然会报错,甚至连删除文件都会报错,这就是第三个注意事项了:

其三,文件正在运行或者受到保护、当前账户没有足够权限时,删除会报错。

这个情况下,对应的文件最后就不要强行删了,不然轻则即使删除了,也会再次自动生成、重则还可能导致正在运行的程序崩溃。

因此,我们在删除文件或文件夹时,加上一个 try except 逻辑结构,跳过那些无法删除的文件:


try:
    os.remove(r'd:\temporary\using.xxx')
except WindowsError:
    print 'nothing has being removed'


按照上面三个步骤写下来,磁盘清理脚本基本功能已经完善。不过除此之外,我们还可以添加一些数据监控代码,多一些对用户友好的人机交互,比如:


显示文件夹(路径)大小,单位 bite


>>> os.path.getsize('d://temporary/test')
4096


显示文件大小


>>> os.path.getsize('d://temporary/test/aaa.txt')
135


其它功能诸如 定时清理、开关机清理、清理时间统计 等等,都可以尝试实现。欢迎在留言区和论坛上讨论。


在公众号里回复 清理,可获取本文演示代码。




近期文章推荐阅读:

未来已来

今天,你抢到票了吗?

爆款游戏《贪吃蛇大作战》的 Python 实现

简单三步,用 Python 发邮件

NBA 举办编程马拉松 - 数据分析时代的到来

Python 与 Excel 不得不说的事

Python-Excel 模块哪家强?

想用 Python 做数据分析?先玩玩这个再说

用 Python 实现你的量化交易策略

Python爬虫:一些常用的爬虫技巧总结

Python 抓取网页乱码原因分析

一些常见的新手问题

相关文章
|
1月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
156 5
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
1月前
|
安全 前端开发 数据库
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
|
14天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
69 11
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
2月前
|
存储 缓存 监控
局域网屏幕监控系统中的Python数据结构与算法实现
局域网屏幕监控系统用于实时捕获和监控局域网内多台设备的屏幕内容。本文介绍了一种基于Python双端队列(Deque)实现的滑动窗口数据缓存机制,以处理连续的屏幕帧数据流。通过固定长度的窗口,高效增删数据,确保低延迟显示和存储。该算法适用于数据压缩、异常检测等场景,保证系统在高负载下稳定运行。 本文转载自:https://www.vipshare.com
135 66
|
1月前
|
小程序 数据安全/隐私保护
跑腿小程序系统源码
这是一款跑腿小程序,带有智能派单、系统派单、同城配送、校园跑腿、预约取件、用户端+骑手端 基于FastAdmin+thinkphp和uniapp开发的优创同城跑腿系统,支持帮取、帮送模式,包含用户端、骑手端、运营后台。
90 32
|
4天前
|
存储 算法 量子技术
解锁文档管理系统高效检索奥秘:Python 哈希表算法探究
在数字化时代,文档管理系统犹如知识宝库,支撑各行各业高效运转。哈希表作为核心数据结构,通过哈希函数将数据映射为固定长度的哈希值,实现快速查找与定位。本文聚焦哈希表在文档管理中的应用,以Python代码示例展示其高效检索特性,并探讨哈希冲突解决策略,助力构建智能化文档管理系统。
|
1月前
|
小程序 IDE PHP
圈子源码如何打包生成App小程序/开发一个圈子系统软件所需要的费用体现在哪里?
将PHP源码打包成App的过程涉及多个步骤和技术选择。以圈子源码为例,首先明确需求,确定App功能和目标用户群体,并根据需求开发小程序页面,如用户注册、圈子列表等。源码准备阶段确保源码适用于小程序开发,环境配置需安装IDE(如微信开发者工具)及依赖库。最后在IDE中打包小程序并上传至管理平台,通过审核后发布。费用方面,模板开发成本较低,定制开发则更高,具体取决于需求复杂度和第三方服务费用。
78 0
|
1月前
|
机器学习/深度学习 算法 前端开发
基于Python深度学习果蔬识别系统实现
本项目基于Python和TensorFlow,使用ResNet卷积神经网络模型,对12种常见果蔬(如土豆、苹果等)的图像数据集进行训练,构建了一个高精度的果蔬识别系统。系统通过Django框架搭建Web端可视化界面,用户可上传图片并自动识别果蔬种类。该项目旨在提高农业生产效率,广泛应用于食品安全、智能农业等领域。CNN凭借其强大的特征提取能力,在图像分类任务中表现出色,为实现高效的自动化果蔬识别提供了技术支持。
基于Python深度学习果蔬识别系统实现
|
1月前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
33 3
|
1月前
|
移动开发 小程序
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
33 0

热门文章

最新文章