• PIL不能关闭文件的解决方案


    今天写了一个能指定图片尺寸,以及比例 来搜索分类图片的Python脚本。为了读取多个格式的文件的头,采用了Python PIL库。

    im = PIL.Image.open(imPath)
    if im的属性满足条件:
        os.move(imPath,newPath)

    出现了文件被占用的错误。查看PIL的Image模块的文档,发现没有close方法。但是它却占用了文件。这实在是蛋疼。

    解决方案如下:

    imFp = open(imPath,"rb")
    im = PIL.Image.open(imFP)
    if im的属性满足条件:
        imFp.close()
        os.move(imPath,newPath)
    else:
        imFp.close()


    另外给出这个脚本的代码:

    import os;
    import os.path;
    import PIL.Image as Image;
    import shutil
    import sys
    reload(sys)
    sys.setdefaultencoding('gb18030')
    wkPath = os.getcwd()
    allImagesNames = 
                 [imPath for imPath in os.listdir(wkPath) 
                  if (os.path.isfileth+os.sep+imPath) and 
                      (os.path.splitext(imPath)[1].lower() in [".jpg",".jpeg",".tiff",".png",".gif",".bmp"]))]
    minAspect = 0.0
    maxAspect = 200.0
    minWidth = 0
    maxWidth = 1000
    minHeight = 0
    maxHeight = 1000
    
    outDir = "Aspect_from"+("%.2f" %minAspect)+"to"+("%.2f" %maxAspect)
    +"Dim from"+str(minWidth)+"x"+str(minHeight)+" to "+str(maxWidth)+"x"+str(maxHeight)
    for imName in allImagesNames:
        fp = open(wkPath+os.sep+imName,"rb")
        print imName
        im = Image.open(fp)
        w = im.size[0]
        h = im.size[1]
        aspect = float(w)/h
        
        fp.close()
        if aspect<=(maxAspect+0.02) and aspect>=(minAspect-0.02) and w<=maxWidth and w>=minWidth and h<=maxHeight and h>=minHeight:
            if not os.path.exists(wkPath+os.sep+outDir):
                os.mkdir(wkPath+os.sep+outDir)
            shutil.move(wkPath+os.sep+imName,wkPath+os.sep+outDir)
            #print "success"
        else:
            pass


     

  • 相关阅读:
    设置iterm可配色
    Java权限管理
    npm添加淘宝镜像
    新版同义词
    maven打包加时间戳方法总结
    python中的实例方法、类方法、静态方法的区别
    15个流行的python框架
    python学习笔记
    前置声明和包含头文件的区别(待补充)
    数组和链表的时间复杂度
  • 原文地址:https://www.cnblogs.com/tlm1992/p/3388442.html
Copyright © 2020-2023  润新知