一文教你利用Python制作一个C盘清理器

 更新时间:2023年03月27日 09:56:19   作者:Python 集中营  
关于电脑的垃圾清理操作,已经有很多的成熟的软件可以帮助我们完成C盘的垃圾清理操作,比如360等等。但是使用三方的清理软件往往伴随着很多的广告,所以本文就来用Python制作一个C盘清理器吧

关于电脑的垃圾清理操作,已经有很多的成熟的软件可以帮助我们完成C盘的垃圾清理操作,比如360等等。

但是使用三方的清理软件往往伴随着很多的广告,而且很多离线情况下并不允许安装这样的三方软件工具。

作为程序猿,自己动手才能丰衣足食,于是想着何不使用python制作一个简易的C盘清理工具彻底摆脱系统盘日益膨胀的烦恼呢?

关于python的文件清理操作,实际上我们使用标准模块os即可满足所有的文件操作。

一般在C盘的清理过程中,我们能够清理的文件类型主要如下:

'''
'.tmp': '临时文件',
    '._mp': '临时文件_mp',
    '.log': '日志文件',
    '.gid': '临时帮助文件',
    '.chk': '磁盘检查文件',
    '.old': '临时备份文件',
    '.xlk': 'Excel备份文件',
    '.bak': '临时备份文件bak'
'''

既然已经知道了需要清理的文件类型,那实现思路就是将这些文件找出来后删除掉即可。

将我们接下来代码块中使用到的os标准模块直接导入到代码块中。

# Importing the os module.
import os

现在可以将一些全局变量首先定义好,比如全局的系统操作路径、待清理的文件后缀名等等。

# 待清理的文件后缀名称
suffix_dict = {
    '.tmp': '临时文件',
    '._mp': '临时文件_mp',
    '.log': '日志文件',
    '.gid': '临时帮助文件',
    '.chk': '磁盘检查文件',
    '.old': '临时备份文件',
    '.xlk': 'Excel备份文件',
    '.bak': '临时备份文件bak'
}

# 用户缓存数据类型名称
user_profile_list = [
    'cookies', 'recent', 'Temporary Internet Files', 'Temp'
]

# windows系统路径文件类型
windir_list = [
    'prefetch', 'temp'
]

# 系统驱动路径
sys_drive = os.environ['systemdrive'] + '\\'

# 用户缓存路径
user_profile = os.environ['userprofile']

# windows系统路径
win_dir = os.environ['windir']

以上相关的C盘清理的全局变量已经设置完成了,接下来我们创建一个ClaenFilesUtil的类来完成对文件清理的业务操作过程。

# This class is used to clean up files in a directory
class CleanFilesUtil():
    def __init__(self):
        """
        A constructor. It is called when an object is created from a class and it allows the class to initialize the
        attributes of a class.
        """
        self.del_info = {}
        self.del_file_paths = []
        self.total_size = 0
        for suffix_name, comment in suffix_dict.items():
            self.del_info[suffix_name] = dict(name=comment, count=0)

    def scanf_files(self):
        """
        It takes a list of files, and returns a list of lists of the lines in each file
        """
        for roots, dirs, files in os.walk(user_profile):
            for files_item in files:
                file_extension = os.path.splitext(files_item)[1]
                if file_extension in self.del_info:
                    file_full_path = os.path.join(roots, files_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_count_message(self):
        """
        It prints the number of messages in the inbox.
        """
        byte = self.format_size(self.total_size)
        for i in self.del_info:
            print(self.del_info[i]["name"], "共计", self.del_info[i]["count"], "个")
        return byte

    def format_size(self, byte):
        """
        It takes a number of bytes and returns a string with the number of bytes, kilobytes, megabytes, or gigabytes,
        depending on the size

        :param byte: The size in bytes
        """
        try:
            kb = byte // 1024
        except:
            print("传入字节格式不对")
            return "Error"
        if kb > 1024:
            M = kb // 1024
            if M > 1024:
                G = M // 1024
                return "%dG" % G
            else:
                return "%dM" % M
        else:
            return "%dkb" % kb

    def remove_file_or_dir(self):
        """
        > This function removes a file or directory
        """
        for full_path_one in self.del_file_paths:
            try:
                if os.path.isfile(full_path_one):
                    os.remove(full_path_one)
                    print("文件:", full_path_one, "已移除")
                elif os.path.isdir(full_path_one):
                    os.rmdir(full_path_one)
                    print("文件夹", full_path_one, "已移除")

            except WindowsError:
                print("错误:", full_path_one, "不能被移除")


if __name__ == "__main__":
    print("开始初始化C盘清理程序")
    clean_ = CleanFilesUtil()
    print('C盘清理程序初始化完成')
    print("开始扫描所有待清理文件路径")
    clean_.scanf_files()
    print("完成所有待清理文件路径扫描")
    print("扫描完成以下是需要待清理的文件路径:")
    clean_.show_count_message()
    print("开始执行C盘垃圾文件删除")
    clean_.remove_file_or_dir()
    print("所有C盘垃圾文件已清理完成")
    input("输入任意键关闭窗口...")

以上就是所有C盘垃圾清理的主要程序业务代码了,但是为了将该清理工具设置成定时任务去执行。

于是,我想到了前几天发布的文章[python不要再使用while死循环,使用定时器代替效果更佳!],可以通过定时器的方式来满足业务要求。

除了使用代码块来完成定时还可以通过配置windows或其他操作系统的定时任务来完成定时执行的需求。

最后,为了方便没有python基础的小伙伴可以直接使用该工具,我将其打包成了exe应用程序。

到此这篇关于一文教你利用Python制作一个C盘清理器的文章就介绍到这了,更多相关Python C盘清理器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python2.7使用scapy发送syn实例

    python2.7使用scapy发送syn实例

    这篇文章主要介绍了python2.7使用scapy发送syn实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python构造函数与析构函数超详细分析

    Python构造函数与析构函数超详细分析

    在python之中定义一个类的时候会在类中创建一个名为__init__的函数,这个函数就叫做构造函数。它的作用就是在实例化类的时候去自动的定义一些属性和方法的值,而析构函数恰恰是一个和它相反的函数,这篇文章主要介绍了Python构造函数与析构函数
    2022-11-11
  • python对视频画框标记后保存的方法

    python对视频画框标记后保存的方法

    今天小编就为大家分享一篇python对视频画框标记后保存的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • 使用 NumPy 和 Matplotlib 绘制函数图

    使用 NumPy 和 Matplotlib 绘制函数图

    Matplotlib 是 Python 的绘图库。 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。 它也可以和图形工具包一起使用,如 PyQt 和 wxPython
    2021-09-09
  • 使用Python中的greenlet包实现并发编程的入门教程

    使用Python中的greenlet包实现并发编程的入门教程

    这篇文章主要介绍了使用Python中的greenlet包实现并发编程的入门教程,Python由于GIL的存在并不能实现真正的多线程并发,greenlet可以做到一个相对的替换方案,需要的朋友可以参考下
    2015-04-04
  • python人工智能自定义求导tf_diffs详解

    python人工智能自定义求导tf_diffs详解

    这篇文章主要为大家介绍了python人工智能自定义求导tf_diffs详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Django项目连接MongoDB的三种方法

    Django项目连接MongoDB的三种方法

    本文主要介绍了Django项目连接MongoDB的三种方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 完美解决pycharm导入自己写的py文件爆红问题

    完美解决pycharm导入自己写的py文件爆红问题

    今天小编就为大家分享一篇完美解决pycharm导入自己写的py文件爆红问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python3.7 新特性之dataclass装饰器

    Python3.7 新特性之dataclass装饰器

    Python 3.7中一个令人兴奋的新特性是 data classes 。这篇文章主要介绍了Python3.7 新特性之dataclass装饰器,需要的朋友可以参考下
    2019-05-05
  • Python使用fastapi快速编写一个增删改查的接口

    Python使用fastapi快速编写一个增删改查的接口

    这篇文章主要为大家详细介绍了Python如何使用fastapi快速编写一个增删改查的接口,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-04-04

最新评论