Python遍历文件夹,删除空文件夹,过滤特定大小和格式的文件

转载请注明出处:http://blog.csdn.net/aitcax/article/details/46489981

target:

  1. 遍历文件夹
  2. 递归删除空文件夹
  3. 删除特定大小的文件
  4. 删除特定格式的文件
  5. 按照特定条件删除文件
detail target:
  1. 遍历文件夹
  2. 递归删除空文件夹
  3. 删除非图片文件,限定几种图片格式
  4. 删除小于指定大小的图片文件
  5. 删除长宽小于指定大小范围的图片文件

code:

# -*- coding: cp936 -*-
'''
遍历文件夹及其子文件夹
查找其中图片文件
过滤空文件
文件大小为0,过滤
'''
import os
import Image
Const_Image_Format = [".jpg",".jpeg",".bmp",".png",".gif"]
rootDir = "D:\source"
#判断路径是否存在
#os.path.exists(folderpath.encode('GBK'))路径如果存在,返回True
limit_size = 51*1024  #图片大小限制,30K
limit_height = 100    #高度限制
limit_width = 100     #宽度限制

class FileFilt:
    #fileList = [""]
    counter = 0
    deleted = 0
    errord = 0
    def __init__(self):
        pass
    def FilterFile(self, dirr):
        for parent,dirnames,filenames in os.walk(rootDir):       
            for filename in filenames :
                fileDir = os.path.join(parent,filename)
                if fileDir and (os.path.splitext(fileDir)[1] in Const_Image_Format ):
                    filesize = os.path.getsize(fileDir)
                    if (filesize <= limit_size):
                        os.remove(fileDir)
                        self.deleted+=1
                    else:
                        try:
                            fp = open(fileDir,'rb')
                            img = Image.open(fp)
                            w,h = img.size
                            if (w < limit_width or h < limit_height):
                                fp.close()
                                os.remove(fileDir)
                                self.deleted+=1
                                continue
                            #print self.counter,fileDir,'w=',w,'h=',h,',size=',(filesize/1024),'k'
                            self.counter+=1
                        except(IOError):
                            fp.close()
                            print "【ERROR】",fileDir
                            os.remove(fileDir)
                            self.errord+=1
                else:
                    os.remove(fileDir)
                    self.deleted+=1



# 删除空文件夹
def delete_null_dir(dirr):
    if os.path.isdir(dirr):
        for p in os.listdir(dirr):
            d  = os.path.join(dirr,p)
            if (os.path.isdir(d) == True):
                delete_null_dir(d)
    if not os.listdir(dirr):
        os.rmdir(dirr)
        print '移除空目录: ', dirr

if __name__ == "__main__":
    print "===开始删除空文件夹==="
    delete_null_dir(rootDir)
    print "===结束删除空文件夹==="
    b = FileFilt()
    b.FilterFile(dirr = rootDir)
    print 'count : ',b.counter
    print 'deleted : ',b.deleted
    print 'errord : ',b.errord
   
    print 'execute finished.'
        


你可能感兴趣的:(Python)