python打开目录错误

时间:2017-06-30 13:29:49

标签: image python-3.x python-imaging-library

写了一些代码来浏览200个图像的文件夹,以获得图像中最小像素数的值(即最小宽度和高度)

但我一直收到这个错误:

File "pixelSizeCheck.py", line 9, in get_num_pixels
width, height = Image.open(open(filepath)).size
IsADirectoryError: [Errno 21] Is a directory: 

当我运行此代码时:

from PIL import Image
import os.path

def get_num_pixels(filepath):
    heightMin= 10000
    widthMin= 10000
    for filename in os.listdir(filepath):
        if filename.endswith(".jpg") :
            width, height = Image.open(open(filepath)).size
            if width< widthMin:
                widthMin = width
                return widthMin

            if height < heightMin:
                heightMin = height
                return heightMin

print (heightMin, widthMin)

get_num_pixels("filepath")

但是我用print语句测试了代码,我知道我输入的目录是正确的,因为它正确到达for循环但是当我尝试赢得第9行时崩溃:

Image.open(open(filepath)).size

我也是python的新手,所以对于如何改进代码的任何建议都会非常感激。如果任何代码草率或差,请提前道歉。

1 个答案:

答案 0 :(得分:1)

您正试图打开您正在扫描的目录:Image.open来电:

open(filepath)

应该是(第二个错误是你必须以二进制模式打开)

open(os.path.join(filepath,filename),"rb")

更好的方法是使用glob.glob过滤同时获取绝对路径:

for filename in os.listdir(filepath):
    if filename.endswith(".jpg") :
        width, height = Image.open(open(os.path.join(filepath,filename),"rb")).size

将成为(添加一个上下文管理器以确保文件已关闭):

for filename in glob.glob(os.path.join(filepath,"*.jpg")):
    with open(filename,"rb") as f:
        width, height = Image.open(f).size