如何在Python中使用PIL用变量代替路径打开图像文件?

0 投票
1 回答
5960 浏览
提问于 2025-04-18 12:48

我正在尝试写一个简单的脚本,从多个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,这是我在谷歌搜索问题时看到的一个建议。代码和上面的一样,只是我在Image.open的代码中做了以下更改:

img = Image.open(StringIO(file_name))

但这并没有解决问题,我还是得到了同样的错误。如果我在Image.open中使用路径而不是变量,它就能正常工作,所以我知道问题出在使用变量上。我是不是漏掉了什么方法?

1 个回答

2

你需要用这个代码:

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 = ...

撰写回答