如何使用变量而不是路径在Python中使用PIL打开图像文件?

时间:2014-07-10 14:02:15

标签: python python-imaging-library pillow

我正在尝试创建一个简单的脚本来同时从多个jpeg文件中提取EXIF信息,但是当我尝试使用变量而不是绝对路径时,我得到“IOError:无法识别图像文件”。这是我正在使用的代码:

import os
from PIL import Image, ExifTags

source = raw_input("Enter the path to scan")
os.chdir(source)
for root, dirs, files in os.walk(source):
    for file_name in files:
        img = Image.open(file_name)
        exif = { ExifTags.TAGS[k]: vars for k, vars in img._getexif().items() if k in ExifTags.TAGS }
        print exif

我也尝试过使用StringIO,我在谷歌搜索我的问题时注意到了这个提示。代码与上面的代码相同,只是我导入StringIO并在Image.open代码中进行以下更改:

img = Image.open(StringIO(file_name))

这没有解决问题,我得到了同样的错误。如果我在Image.open中给出路径而不是变量,它确实正常工作,所以我知道问题是尝试使用变量。有没有办法做到这一点,我错过了?

1 个答案:

答案 0 :(得分:1)

您需要使用此代码:

img = Image.open(os.path.join(root, file_name))

如果您的目录层次结构中有任何非图像文件,那么当您尝试打开它们时仍会出现错误,但这是一个合理的错误,因此您可以执行以下操作:

try:
    img = Image.open(os.path.join(root, file_name))
except IOError:
    print "Error: %s does not appear to be a valid image" % (os.path.join(root, file_name))
else:
    exif = ...