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()

 

posted on 2018-03-19 21:47  我是人间惆怅客1  阅读(2611)  评论(0编辑  收藏  举报

导航