python获取当前目录下子文件夹大小 然后大到小排序 询问是否删除某些子文件夹

1、用os.path.getsize获取文件大小

用os.walk遍历文件夹

</pre><p></p><p>用os.getcwd()获取当前路径</p><p>用os.listdir获取路径下的文件和文件夹</p><p><span style="color:rgb(51,51,51); font-family:arial,宋体,sans-serif,tahoma,'Microsoft YaHei'; font-size:14px; line-height:24px; background-color:rgb(243,255,236)">用os.popen('rm -rf /tmp/tmpabc')删除文件</span></p><p>2、代码如下:</p><p></p><pre name="code" class="python">#!/usr/bin/env python27
#-*- coding:utf-8 -*-
import os
from os.path import join,getsize,exists,isfile,isdir


def getdirsize(dir): #获取文件或文件夹大小
    size=0L
    if exists(dir):
        if isfile(dir): 
            size+=getsize(dir)            
        else:
            for root,dirs,files in os.walk(dir): #遍历文件夹并获取文件夹大小
                size+=sum([getsize(join(root,name)) for name in files])
    return size


def getsizeStr(size): #转换文件大小为‘3.5KB’之类的字符串
    if 0==size: return '0'
    if size/1024.0<1: return '<1KB'
    if size/1024.0**2<1:  return '%0.1fKB' % (size/1024.0)
    if size/1024.0**3<1:  return '%0.1fMB' % (size/1024.0**2)
    return '%0.3fG' % (size/1024.0**3)


def getsortedfiles(dirname):    #把文件夹里的一级目录或文件按大到小排序
    f_size=[(files,getdirsize(join(dirname,files))) for files in os.listdir(dirname)]
    return sorted(f_size,key=lambda s:s[1],reverse=True)  #反序排序tuple组成的列表

if __name__ == '__main__':
    dirname=os.getcwd()   #获取当前路径
    while True:
        d=raw_input("please input a floder name(default:"+dirname+"):")        
        if exists(d):    #判断路径是否存在
            dirname=d
            break
        elif d=='': 
            break
        print '文件夹不存在,请重新输入'  
    #列出dirname中的子文件夹
    subdirs=[dirs for dirs in os.listdir(dirname) if isdir(join(dirname,dirs))] 
    #由(子文件夹名,子文件夹大小)组成新的列表,并按size从大到小排序
    dirsize=sorted([(d,getdirsize(join(dirname,d))) for d in subdirs],key=lambda s:s[1],reverse=True)  
    print '-------------------------------------'
    print '序号 ,文件夹名称 ,大小:'   
    #显示所有子文件夹的总大小      
    print '0 , all sub dirs  ,',getsizeStr(sum([size for d,size in dirsize]))
    for d,size in dirsize:
        print dirsize.index((d,size))+1, ', "'+d+'" ,', getsizeStr(size)
    print '-------------------------------------'
    #根据输入的序号,删除对应的文件夹
    while True:
        a=raw_input('请输入要删除的文件夹序号(0-'+str(len(dirsize))+'):')
        if ''==a:
            break
        elif '0'==a:
            b=raw_input('确认删除所有子文件夹?(y/n)')
            if 'y'==b.lower():
                for dirs in subdirs:
                    os.popen('rm -rf '+join(dirname,dirs))
                print '操作完毕,已删除所有子文件夹'
                break
        elif a>='1' and a<=str(len(subdirs)):
            deldir=dirsize[int(a)-1][0]
            b=raw_input('确认删除文件夹"'+deldir+'"?(y)')                    
            if ''==b or 'y'==b.lower():
                os.popen('rm -rf '+join(dirname,deldir))   
                print '操作完毕,已删除文件夹"'+deldir+'",按回车键退出或输入其他序号继续'   
        else:
            print '输入有误,按回车键退出或输入正确序号删除文件'     

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值