python实现文件夹的排序
我的github地址。
代码:
# -*- coding: utf-8 -*-
__author__ = "YuDian"
'''
v1.0: 2018/3/19 21:39
完成对指定的文件夹(TopDir)内部的文件和目录进行排序。文件和目录混合排序。可选择从小到大或者是从大到小。
'''
import os class dirc(object): # dirc类用来表示文件的大小和类型(kb,mb,gb)
def __init__(self,name,size,sizetype,ctype=0):
self.name=name # name存放名字
self.size=size # size存放更换过的大小
self.sizetype=sizetype # sizetype存放类型
self.ctype=ctype # file or dir
self.realtype=self.int2str(self.sizetype) # 类型的真实意义 b,kb,mb,gb
self.realctype=self.ctype2real(self.ctype) def int2str(self,sizetype):
if self.sizetype==1:
return 'Byte'
elif self.sizetype==2:
return 'KB'
elif self.sizetype==3:
return 'MB'
elif self.sizetype == 4:
return 'GB' def ctype2real(self,ctype):
if ctype==1:
return 'Dir'
elif ctype==0:
return 'File' def printlog(self):
print(self.realctype,':',self.name,'__',self.size,self.realtype) AllSize=[] # AllSize用来存放所有的dirc类 def single_dir_size(dirname): #程序的功能是对传入的文件夹计算大小的单位
size=GetDirSize(dirname) # 调用GetDirSize函数,得到原始大小
BeautifulSize,sizetype=beautiful_size(size) # 调用beautiful_size函数,得到变换后的大小和单位
return BeautifulSize,sizetype def GetDirSize(dirname): # 得到dirfile的大小。dirname是文件夹名
TotalSize=0
for (DownRoot,DownDirs,DownFiles) in os.walk(dirname):
for file in DownFiles:
TotalSize=TotalSize+os.path.getsize(os.path.join(DownRoot,file))
return TotalSize def beautiful_size(size): # 对size进行单位转换
sizeflag=1
while size>1024:
size=size/1024
sizeflag=sizeflag+1 # sizeflag:1 byte 2: kb 3:mb 4:gb
return size,sizeflag def all_sort(list,SortType=1): # SortType:1 AllSize[0]:min SortType:0 AllSize[0]:max # 不能用可变参量*name传入list。不然在函数内会变成tuple #用冒泡排序法对List进行排序
for n in range(0,len(AllSize)-1):
for i in range(0,len(AllSize)-1-n):
RivalLow=AllSize[i]
RivalHigh=AllSize[i+1]
c=RivalLow.size * 1024 ** (RivalLow.sizetype - 1)
d=RivalHigh.size * 1024 ** (RivalHigh.sizetype - 1)
if RivalLow.size*1024**(RivalLow.sizetype-1)>RivalHigh.size*1024**(RivalHigh.sizetype-1):
AllSize[i],AllSize[i+1]=RivalHigh,RivalLow
if SortType==1: # 选择排序方法:默认从小到大
return AllSize # 1 从小到大
elif SortType==0:
return AllSize[::-1] # 0 从大到小 n=1 # 得到TopDor下一层的文件夹名
TopDir=r'F:\for_python' # TopDir 指向最高层的文件夹
for(root,dirs,files) in os.walk(TopDir):
if n==1:
FirstName=dirs # FirstName下存放的是TopDir下第一层的文件夹名(只有名字,不是全路径)
FirstFiles=files
n = n + 1
for FileName in FirstFiles:
FileFullName=os.path.join(root,FileName)
FileSize=os.path.getsize(FileFullName)
FileSize,FileSizeType=beautiful_size(FileSize)
AllSize.append(dirc(name=FileFullName,size=round(FileSize,3),sizetype=FileSizeType,ctype=0)) for name in FirstName:
DirAllName=os.path.join(root,name) # 得到文件夹的完整路径
DirSize,DirSizeType=single_dir_size(DirAllName) # 得到文件大小和单位
AllSize.append(dirc(name=DirAllName,size=round(DirSize,3),sizetype=DirSizeType,ctype=1)) # 将信息组成class放到List中。
# round(size,n) 将传入的数据size保留n位小数。
# for i in AllSize:
# print(i.name,'__',i.size,'__',i.realtype)
# print(type(AllSize))
SortedAllSize=all_sort(AllSize)
for i in SortedAllSize:
i.printlog()
python实现文件夹的排序的更多相关文章
- python 遍历文件夹 文件
python 遍历文件夹 文件 import os import os.path rootdir = "d:\data" # 指明被遍历的文件夹 for parent,dirn ...
- python 关于文件夹的操作
在python中,文件夹的操作主要是利用os模块来实现的, 其中关于文件夹的方法为:os.lister() , os.path.join() , os.path.isdir() # path 表示文 ...
- Python打包文件夹的方法小结(zip,tar,tar.gz等)
本文实例讲述了Python打包文件夹的方法.分享给大家供大家参考,具体如下: 一.zip ? 1 2 3 4 5 6 7 8 9 10 11 import os, zipfile #打包目录为zip文 ...
- python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件
python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 python操作txt文件中 ...
- linux 文件&文件夹大小排序
按照当前文件夹的文件大小排序: ls -l | sort -k 5 -n -r 其中 sort 的几个参数: -k 5: 表示使用第五列字段排序, 当需要按照多个字段排序时, 可使用多个 -k 参数, ...
- 用Python打开文件夹
用Python读取文件夹, 然后打开文件 下面读取到文件的每一个内容, 然后加上路径 import os path = r'../Downloads/text/content' for filenam ...
- 如何使用python 新建文件夹以及递归创建文件夹
转载:如何使用python 新建文件夹以及递归创建文件夹 | 酷python (coolpython.net) 1. os.mkdir 使用python创建文件夹,通常使用os.mkdir方法,在使用 ...
- Python遍历文件夹
许多次需要用python来遍历目录下文件, 这一次就整理了记录在这里. 随实际工作,不定期更新. import os class FileTraversal: def __init__(self, r ...
- python遍历文件夹下的文件
在读文件的时候往往需要遍历文件夹,python的os.path包含了很多文件.文件夹操作的方法.下面列出: os.path.abspath(path) #返回绝对路径 os.path.basename ...
随机推荐
- Exchange2016 & Skype for business 集成之三统一联系人存储
Exchange2016&Skype for business集成之二统一联系人存储 利用统一的联系人存储库,用户可以维护单个联系人列表,然后使这些联系人适用于多个应用程序,包括 Skype ...
- 沉淀再出发:kafka初探
沉淀再出发:kafka初探 一.前言 从我们接触大数据开始,可能绕在耳边的词汇里面出现的次数越来越多的就包括kfaka了.kafka的设计初衷是希望作为一个统一的信息收集平台,能够实时的收集反馈信息, ...
- source insight设置问题 [问题点数:20分,结帖人leecapacity]
http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763104687270e54f7327d818c027fa3cf1fd5791d1c05 ...
- MVC中使用过滤器做权限认证需要注意的地方
最近一项目接近尾声,正准备调试的时候发现一条原本不应该执行的SQL语句执行报错了,本就不应该执行,所以当然也就出错,找了一下,问题如下. 我这里是直接重写OnActionExecuting方法来达到目 ...
- 可以在命令行直接使用密码来进行远程连接和远程拉取文件的命令:sshpass
应用范围:可以在命令行直接使用密码来进行远程连接和远程拉取文件. 使用前提:对于未连接过的主机.而又不输入yes进行确认,需要进行sshd服务的优化: # vim /etc/ssh/ssh_con ...
- 操作dict时避免出现KeyError的几种方法
在读取dict的key和value时,如果key不存在,就会触发KeyError错误,如: Python t = { ', ', ', } print(t['d']) 就会出现: <code c ...
- PHP imagechar() 图形验证码 字体太小问题
bool imagechar ( resource $image , int $font , int $x , int $y , string $c , int$color ) imagechar() ...
- 6、Android---运用手机多媒体(待完成)
6.1.程序运行在手机上 6.2.使用通知 通知是Android中比较由特色的一个功能 当某个应用程序需要向用户发出一些提示信息时 而该程序由不在前台的显示 就可以借助通知来实现 6.2.1.通知的基 ...
- const引用和constexpr
1.const指针 eg: (1) int const * p = nullptr; p = new int[10]; p[3] = 4; //error 我们发现第三行没法编译,这是因为第一行的c ...
- python3之安装mysql问题
python3是不能通过pip install mysql或pipinstall mysqldb这样的形式来安装mysql. 只能 pip install PyMySQL 至于如何在文件中引用? 答曰 ...