電腦卡頓?用這個腳本打印出你家的電腦所有大文件看看什麼原因吧

背景:

最近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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章