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

前言

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346383.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于java家教管理系统_基于jsp的家教信息管理-JavaEE实现家教信息管理 - java项目源码...

基于jspservletpojomysql实现一个javaee/javaweb的家教信息管理, 该项目可用各类java课程设计大作业中, 家教信息管理的系统架构分为前后台两部分, 最终实现在线上进行家教信息管理各项功能,实现了诸如用户管理, 登录注册, 权限管理等功能, 并实现对各类家教信息管理相关的实体…

如何从云功能调用外部REST API

在之前的博客文章中,我展示了如何创建您的第一个云功能 (以及一个视频 )。 您的云函数很可能需要调用外部REST API。 以下教程将向您展示如何创建此类功能(非常简单)。 登录到IBM Cloud帐户 点击目录 删除标签&…

sinx泰勒展开_高考中怎么用泰勒公式?

好久没有更新了,最近一直在准备天津市高数竞赛,今天才有空写高考的文章看,并且运用这篇文章的前提要求是已经掌握了绝大多数的高考题型然后了解泰勒拓展知识面什么是泰勒公式?你去百度肯定会有一大堆理论给你解释,今天…

java selenium 日志_java - 支持selenium日志_java_酷徒编程知识库

在自動測試中,Chrome創建了大量日誌,System.setProperty("webdriver.chrome.silentOutput","true");ChromeOptions options new ChromeOptions();options.addArguments("--disable-logging","--log-levelOFF",…

机器学习分类算法_机器学习分类算法

人们曾在自身的神经元得到启发,将机器学习中给出的特征输入与权重之积作为输出与阈值作比较,得到0或者1的输出。这就是我们感知器的实现原理感知器在实现过程中的步骤如下:①将权值初始化称为一个很小的向量②迭代训练所有样本:计…

scala 异步调用_非阻塞异步Java 8和Scala的Try / Success / Failure

scala 异步调用受Heinz Kabutz最近的时事通讯以及我在最近的书中研究的Scala的期货的启发,我着手使用Java 8编写了一个示例,该示例如何将工作提交给执行服务并异步地响应其结果,并使用了回调。无需阻止任何线程等待执行服务的结果。 理论认为…

java简单的事务单元_junit 单元测试事务自动回滚(亲测有效)

junit 单元测试事务会自动回滚。通过Rollback(true)注解来实现,默认是true,事务会回滚,可以不写。false时事务不会回滚,数据会写到数据库中。实例:package com.xiaolyuh.service;import java.util.Date;import org.jun…

linux系统如何打开python_手把手教你在Linux系统下使用Python虚拟环境

点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤夕阳无限好,只是近黄昏。/1 前言/Hello小伙伴们,你们好,又是日常get新技能的一天,今天,咱们来整一…

Java EE 7中的资源和依赖注入

1.概述 上下文和依赖注入(CDI)是Java EE的一项功能,可帮助融合Java EE 6和更高版本中包含的平台的Web层和事务层。 从技术角度来看,这意味着CDI提供了依赖项注入框架,并且还管理了依赖项的生命周期。 今天在本教程中&…

java wrap方法_Java WritableCellFormat.setWrap方法代码示例

import jxl.write.WritableCellFormat; //导入方法依赖的package包/类/*** param workSheet to add the help to* param table to fetch metadata from* param startRow to start adding rows at* param helpTextRowNumbers - map to insert row numbers for each help field i…

python创建tcp socket_Python Socket如何建立TCP连接

在 Python 程序中创建 TCP 服务器时,创建通用 TCP 服务器的一般演示代码如下。需要记住的是,这仅是设计服务器的一种方式。一旦熟悉了服务器设计,可以修改下面的代码来操作服务器。ss socket() #创建服务器套接字ss.bind() #绑定套接字与地址…

ubantu java编辑器_Linux Ubuntu中最好的代码编辑器 程序员都这么看吗?

【IT168 应用】Linux Ubuntu 中最好的代码编辑器是哪个 ? 这要看程序员的使用习惯和喜好了,Atom、Brackets、Sublime Text 是最常用的三个,也许程序员们还有更喜欢的。AtomAtom 是流行,而且十分友好的文本编辑器,而且还可以嵌入到…

apache camel_Apache Camel –从头开始开发应用程序(第1部分/第2部分)

apache camel开始之前 前段时间,我写了一篇关于Spring Integration的教程,以演示如何在受现实发票处理系统启发的示例应用程序中使用Spring Integration。 我对此非常满意,因此我决定向您展示如何使用Apache Camel(Spring Integra…

python websocket异步高并发_高并发异步uwsgi+web.py+gevent

为什么用web.py?python的web框架有很多,比如webpy、flask、bottle等,但是为什么我们选了webpy呢?想了好久,未果,硬要给解释,我想可能原因有两个:第一个是兄弟项目组用webpy&#xff…

提示:通过URL激活并发送参数

世界上最安全的密码是不存在的密码。 使用完全随机的密钥从等式中删除用户。 公平地说,这有一些缺点,并且密码仍然存在于某个地方(在您的电话/电子邮件中),但通常效果很好。 诀窍很简单,如果我们想对用户进…

weblogic创建域后启动不了_摩托车淋雨后启动不了什么原因?如何解决?

图文是工作,视频是生活。大家好,我是 骑士分享 欢迎您的关注!摩托车淋雨后启动不了什么原因?如何解决?这种现象对于电喷车型来说发生的几率并不大,原因就在于电喷车型的线路防水能力会更强,供油…

前端开始学java_[Java教程]开启前端学习之路

[Java教程]开启前端学习之路0 2014-06-10 17:00:06前言第一次在博客园写博客,写写自己开启前端学习之路。应该是受邢师兄的影响吧,不得不说邢师兄人很好,学习也很认真,师兄的前端也是自学的,但是学的很好,大…

python 傅里叶_基于python的图像傅里叶处理

import numpy as npimport matplotlib.pyplot as pltx np.linspace(-10, 10, 1000)a np.cos(x)b a np.cos(3 * x)# d np.log(x)c b np.cos(7 * x)d c - np.cos(10 * x)plt.subplot(2, 2, 1)plt.plot(x, a, label‘$cos(x)$‘, color‘green‘, linewidth1)plt.title(&q…

xalan_如何以10倍速加速Apache Xalan的XPath处理器

xalan一段时间以来, Apache Xalan中存在一个令人尴尬的错误,该错误是XALANJ-2540 。 此错误的后果是Xalan每次XPath表达式求值将内部SPI配置文件加载数千次 ,可以很容易地进行如下测量: 这个: Element e (Element)do…

EMUI10安装java_linux ubuntu系统安装java jdk和配置环境,pycharm安装

最近想使用pycharm,可是要想搭建java 环境,搞了很久才搞定,网上很多资料都是没用的。记录下来以后有用。首先加下载jdk安装包。我下的是jdk-6u37-linux-x64.bin,我把jdk安装在usr/lib/jvm1.sudo cp jdk-6u37-linux-x64.bin /usr/lib/jvm #将安…