python實現文件夾的排序


我的github地址。

代碼:

  1 # -*- coding: utf-8 -*-
  2 __author__ = "YuDian"
  3 '''
  4     v1.0:   2018/3/19 21:39
  5         完成對指定的文件夾(TopDir)內部的文件和目錄進行排序。文件和目錄混合排序。可選擇從小到大或者是從大到小。
  6 '''
  7 import os
  8 
  9 class dirc(object):         # dirc類用來表示文件的大小和類型(kb,mb,gb)
 10     def __init__(self,name,size,sizetype,ctype=0):
 11         self.name=name     # name存放名字
 12         self.size=size      # size存放更換過的大小
 13         self.sizetype=sizetype      # sizetype存放類型
 14         self.ctype=ctype           # file or dir
 15         self.realtype=self.int2str(self.sizetype)    # 類型的真實意義 b,kb,mb,gb
 16         self.realctype=self.ctype2real(self.ctype)
 17 
 18     def int2str(self,sizetype):
 19         if self.sizetype==1:
 20             return 'Byte'
 21         elif self.sizetype==2:
 22             return 'KB'
 23         elif self.sizetype==3:
 24             return 'MB'
 25         elif self.sizetype == 4:
 26             return 'GB'
 27 
 28     def ctype2real(self,ctype):
 29         if ctype==1:
 30             return 'Dir'
 31         elif ctype==0:
 32             return 'File'
 33 
 34     def printlog(self):
 35         print(self.realctype,':',self.name,'__',self.size,self.realtype)
 36 
 37 AllSize=[]         # AllSize用來存放所有的dirc類
 38 
 39 def single_dir_size(dirname):                   #程序的功能是對傳入的文件夾計算大小的單位
 40     size=GetDirSize(dirname)            # 調用GetDirSize函數,得到原始大小
 41     BeautifulSize,sizetype=beautiful_size(size)   # 調用beautiful_size函數,得到變換后的大小和單位
 42     return BeautifulSize,sizetype
 43 
 44 def GetDirSize(dirname):                #  得到dirfile的大小。dirname是文件夾名
 45     TotalSize=0
 46     for (DownRoot,DownDirs,DownFiles) in os.walk(dirname):
 47         for file in DownFiles:
 48             TotalSize=TotalSize+os.path.getsize(os.path.join(DownRoot,file))
 49     return TotalSize
 50 
 51 
 52 def beautiful_size(size):           # 對size進行單位轉換
 53     sizeflag=1
 54     while size>1024:
 55         size=size/1024
 56         sizeflag=sizeflag+1    # sizeflag:1  byte       2: kb    3:mb    4:gb
 57     return size,sizeflag
 58 
 59 def all_sort(list,SortType=1):     # SortType:1   AllSize[0]:min     SortType:0  AllSize[0]:max
 60 
 61     # 不能用可變參量*name傳入list。不然在函數內會變成tuple
 62 
 63 #用冒泡排序法對List進行排序
 64     for n in range(0,len(AllSize)-1):
 65         for i in range(0,len(AllSize)-1-n):
 66             RivalLow=AllSize[i]
 67             RivalHigh=AllSize[i+1]
 68             c=RivalLow.size * 1024 ** (RivalLow.sizetype - 1)
 69             d=RivalHigh.size * 1024 ** (RivalHigh.sizetype - 1)
 70             if RivalLow.size*1024**(RivalLow.sizetype-1)>RivalHigh.size*1024**(RivalHigh.sizetype-1):
 71                 AllSize[i],AllSize[i+1]=RivalHigh,RivalLow
 72     if SortType==1:                 # 選擇排序方法:默認從小到大
 73         return AllSize              # 1 從小到大
 74     elif SortType==0:
 75         return AllSize[::-1]        # 0  從大到小
 76 
 77 
 78 
 79 n=1                       # 得到TopDor下一層的文件夾名
 80 TopDir=r'F:\for_python'           # TopDir 指向最高層的文件夾
 81 for(root,dirs,files) in os.walk(TopDir):
 82     if n==1:
 83         FirstName=dirs           # FirstName下存放的是TopDir下第一層的文件夾名(只有名字,不是全路徑)
 84         FirstFiles=files
 85         n = n + 1
 86         for FileName in FirstFiles:
 87             FileFullName=os.path.join(root,FileName)
 88             FileSize=os.path.getsize(FileFullName)
 89             FileSize,FileSizeType=beautiful_size(FileSize)
 90             AllSize.append(dirc(name=FileFullName,size=round(FileSize,3),sizetype=FileSizeType,ctype=0))
 91 
 92         for name in FirstName:
 93             DirAllName=os.path.join(root,name)   # 得到文件夾的完整路徑
 94             DirSize,DirSizeType=single_dir_size(DirAllName)         # 得到文件大小和單位
 95             AllSize.append(dirc(name=DirAllName,size=round(DirSize,3),sizetype=DirSizeType,ctype=1))  # 將信息組成class放到List中。
 96                             # round(size,n)  將傳入的數據size保留n位小數。
 97         # for i in AllSize:
 98         #     print(i.name,'__',i.size,'__',i.realtype)
 99         # print(type(AllSize))
100         SortedAllSize=all_sort(AllSize)
101         for i in SortedAllSize:
102             i.printlog()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM