• 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


     

  • 相关阅读:
    Two Sum II
    Subarray Sum
    Intersection of Two Arrays
    Reorder List
    Convert Sorted List to Binary Search Tree
    Remove Duplicates from Sorted List II
    Partition List
    Linked List Cycle II
    Sort List
    struts2结果跳转和参数获取
  • 原文地址:https://www.cnblogs.com/tlm1992/p/3388442.html
Copyright © 2020-2023  润新知