我正在尝试创建一个简单的脚本来同时从多个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中给出路径而不是变量,它确实正常工作,所以我知道问题是尝试使用变量。有没有办法做到这一点,我错过了?
答案 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 = ...