电脑卡顿?用这个脚本打印出你家的电脑所有大文件看看什么原因吧

背景:

最近C盘空间不知道为什么,剩余量非常少,只有13个G,有时仅剩个位数,这还是清理过的存储

查看了半天也找不到是哪个淘气的大文件在占用空间,一怒之下决定自己写一个脚本跑跑看

既然自己做,用其他库就没意思了,当然os库除外,连字典排序也懒得用sort,都自己写得了

       

 

 

具体实现:

就直接贴上源代码吧,原理是,主要用到os.walk和os.path以及os.path.getsize 这三个方法

注释的也已经很详细了,不了解请查看我的另一片关于os.walk的博客~

 


"""

author:Horizon

time:2020/5/19

目的:给定任何数量的任意文件夹路径,打印这些路径下所有的文件夹占用空间的大小

#并根据占据空间大小降序显示,为了避免打印过长,只显示大于200M的文件夹

"""


import os


class listpath():


    def __init__(self,path,*args):


        #初始化要查询的文件夹数量可以自由控制,用列表保存

        self.paths = []


        self.paths.append(path)


        if args:


            for arg in args:


                self.paths.append(arg)




    def get_file_path(self):


        file_path = []


        for path in self.paths:


            #root dirs 和files方法,分别代表walk下的根目录

            #及里面的所有文件夹和文件,

            #原理是root变化后其目录下的dirs和files也会变


            for root, dirs, files in os.walk(path):


                for file in files:

                    #将所有文件的路径与根目录连接即可获得绝对路径

                    file_path.append(os.path.join(root, file))


        return file_path




    def get_dir_path(self):


        #原理同上面的获得文件函数,不同的是这次获得root下所有文件夹

        dir_path = []


        for path in self.paths:


            for root, dirs, files in os.walk(path):


                for dir in dirs:


                    dir_path.append(os.path.join(root, dir))


        return dir_path




    def print_filepath(self):


        #遍历并将所有文件路径打印出来

        paths = self.get_dir_path()


        for path in paths:


            print(path)




    def print_dirpath(self):


        #遍历并将所有文件夹路径打印出来


        paths = self.get_file_path()


        for path in paths:


            print(path)



#这个函数的主要作用是:

#给定一个弹性路径列表,读取这个路径下的所有文件夹大小

#并以一个字典的方式返回

def get_dirs_size(*args):


    dirs = listpath(*args)


    dir_size_dict = {}


    for dir in dirs.get_dir_path():

        #文件夹大小就是文件夹内的所有文件大小之和

        files_size = 0


        #创建一个listpath实例,目的是获得dir下的所有文件路径

        files = listpath(dir)


        #遍历所有文件

        for file in files.get_file_path():


            #将各个文件的存储空间相加

            files_size += os.path.getsize(file)


        #将得到的值和dir分别最为value和key,返回这个字典

        dir_size_dict[dir] = files_size

   

    return dir_size_dict



#将字典的值降序排序,并与key值对应起来

#用两张列表存储,最后再压缩成一张列表

def sort_dict(dict):


    keylist = []


    valuelist = []


    #获取长度

    for key in dict:


        keylist.append(key)


        valuelist.append(dict[key])


    #选择排序

    for i in range(0,len(valuelist)):


        for j in range(i+1,len(valuelist)):


            if valuelist[i] < valuelist[j]:


                temp = valuelist[i]


                valuelist[i] = valuelist[j]


                valuelist[j] = temp


                temp = keylist[i]


                keylist[i] = keylist[j]


                keylist[j] = temp


    sorted_list = zip(keylist, valuelist)


    return sorted_list



#最终调用的函数,将信息打印出来

def print_dirs_size(*args):


    res = sort_dict(get_dirs_size(*args))


    #依次遍历这张压缩表,就可获得最终结果

    for key ,value in res:


        size = round(value/(1024**3),2)


        #大于200M才打印

        if size > 0.2:         


            print('路径:' , key,'占用空间为:', size, 'G')




if __name__ == "__main__":


    print_dirs_size('C:/Users','D:/')

   

 

  

 

运行结果:实现功能需求,打印正常

 

搞了半天,原来是C盘下的linux虚拟机占用了将近30个G的空间

当初为了SSD速度快放到C盘,没想到很快就爆满了。。。

这样子的话还真拿它没办法了~~

         

 

   

最后正确性验证,完美实现了预期效果~  

 

更多内容请访问:bookist123.PICP.NET

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值