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

作者:栖迟於一丘 时间:2021-12-10 22:13:04 

前言

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

来源:https://www.hongweipeng.com/index.php/archives/1084/

标签:python,垃圾
0
投稿

猜你喜欢

  • 详解Python爬虫爬取博客园问题列表所有的问题

    2021-02-15 02:01:46
  • python time模块时间戳 与 结构化时间详解

    2021-04-09 11:06:42
  • 良好体验,必须是全方位的

    2009-09-24 13:32:00
  • Python列表删除所有出现元素的两种方法

    2023-03-05 23:24:08
  • mysql 复制表结构和数据实例代码

    2024-01-18 00:00:45
  • python数组如何添加整行或整列

    2022-04-29 16:39:30
  • Gradio机器学习模型快速部署工具quickstart

    2023-06-30 01:09:52
  • 10个顶级Python实用库推荐

    2023-08-27 17:41:46
  • Python实现批量翻译的示例代码

    2023-02-27 04:24:12
  • Python科学计算包numpy用法实例详解

    2021-11-12 15:07:20
  • SQL Server 日期相关资料详细介绍

    2012-07-11 16:14:07
  • 页面上存在多个FckEditor编辑器的验证方法

    2022-07-29 07:00:49
  • Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例

    2023-03-16 21:02:45
  • Web Forms 2.0

    2008-07-24 12:47:00
  • python中实现修改图像分辨率大小

    2021-05-06 06:23:22
  • GC与JS内存泄露

    2010-09-25 19:01:00
  • 浅谈python for循环的巧妙运用(迭代、列表生成式)

    2023-04-15 02:17:29
  • 用Python画圣诞树代码示例

    2023-06-14 06:22:27
  • Python编程中归并排序算法的实现步骤详解

    2023-06-05 09:38:23
  • Django使用中间件解决前后端同源策略问题

    2022-09-05 10:33:32
  • asp之家 网络编程 m.aspxhome.com