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

发布时间 - 2026-01-10 22:32:22    点击率:

前言

大家应该都有所体会,在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实现清理垃圾  # proe垃圾文件清理程序  # python清理window垃圾  # Python实现自动清理电脑垃圾文件详解  # 用Python自动清理系统垃圾的实现  # 磁盘垃圾文件清理器python代码实现  # Python实现Harbor私有镜像仓库垃圾自动化清理详情  # 遍历  # 临时文件  # 备份文件  # 系统盘  # 就会  # 目录下  # 然后再  # 文件列表  # 报错  # 帮助文件  # 值为  # 有的是  # 的是  # 目录中  # 适用于  # 请在  # 这类  # 要想  # 扩展名  # 做一个 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 利用python获取某年中每个月的第一天和最后一天  网站优化排名时,需要考虑哪些问题呢?  javascript中对象的定义、使用以及对象和原型链操作小结  独立制作一个网站多少钱,建立网站需要花多少钱?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  详解Android中Activity的四大启动模式实验简述  想要更高端的建设网站,这些原则一定要坚持!  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  海南网站制作公司有哪些,海口网是哪家的?  HTML 中动态设置元素 name 属性的正确语法详解  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  如何挑选高效建站主机与优质域名?  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  iOS发送验证码倒计时应用  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  在线制作视频网站免费,都有哪些好的动漫网站?  公司网站制作价格怎么算,公司办个官网需要多少钱?  Laravel如何实现API资源集合?(Resource Collection教程)  如何在 Pandas 中基于一列条件计算另一列的分组均值  如何快速搭建高效WAP手机网站?  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  Laravel如何处理表单验证?(Requests代码示例)  Laravel如何使用Gate和Policy进行授权?(权限控制)  javascript中的try catch异常捕获机制用法分析  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  javascript基本数据类型及类型检测常用方法小结  JS经典正则表达式笔试题汇总  Android使用GridView实现日历的简单功能  个人网站制作流程图片大全,个人网站如何注销?  Laravel如何使用Eloquent进行子查询  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  Python图片处理进阶教程_Pillow滤镜与图像增强  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  如何快速搭建自助建站会员专属系统?  黑客如何通过漏洞一步步攻陷网站服务器?  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  Laravel怎么在Blade中安全地输出原始HTML内容  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  ,南京靠谱的征婚网站?  如何用狗爹虚拟主机快速搭建网站?  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  如何在宝塔面板创建新站点?  如何快速启动建站代理加盟业务?  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置