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 ...
随机推荐
- 51nod 1349 最大值
题目看这里 找到每个元素g[i]作为最大值的区间[L,R],那么以他为最大值的区间数有(i-L+1)*(R-i+1)个. 为了加速,以k为最大值的区间数放入H[k],再以此统计一个前缀和,更新入H.那 ...
- iOS测试基础(命令篇)-iPhone型号及其他信息
首先安装libimobiledevice和ideviceinstaller brew uninstall ideviceinstaller brew uninstall libimobiledevic ...
- 自定义控件(视图)2期笔记13:View的滑动冲突之 内部拦截法
1. 内部拦截法: 父容器不拦截事件,所有的事件全部都传递给子元素,如果子元素需要此事件就直接消耗掉,否则就交给父容器进行处理. 这种方法和Android中的事件分发机制不一样,需要配合request ...
- BZOJ1042:[HAOI2008]硬币购物(DP,容斥)
Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法. Input 第一 ...
- webpack中Entry与Output的基础配置
entry顾名思义,就是打包的入口文件 module.exports = { // 这个文件要做打包,从哪一个文件开始打包 entry: './src/index.js', // 打包文件要放到哪里去 ...
- windows C++ new/delete内存大小
转载自:https://blog.csdn.net/will_hsbsch/article/details/21124055 windows 上,但使用C++语言new一块内存,用指针P指向这块内存, ...
- 从getshell到提权
从getshell到提权 一.起因 学校推出新的党建系统,之前党建系统还参与开发,后来因为一些原因没有开发,主要想看看这届工作室的学弟.学妹代码水平,把源码撸下来审计一下,工作室用git开发的,记着上 ...
- Odoo中的模型
转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9280164.html [Odoo中,一切皆模型,连视图都是模型.Odoo将各种数据,如:权限数据 ...
- linq注意错误
使用EntityFramework6连接MySql数据库(db first方式) 准备工具: VS2013.MySQL For VisualStudio 1.1.4.Connector/Net 6.8 ...
- Azure Blob数据迁移工具
数据迁移备份,更多的应用场景见https://docs.azure.cn/zh-cn/storage/common/storage-moving-data?toc=%2fstorage%2fblobs ...