使用PIL加载文件夹图片报错:'generator'对象无'seek'属性
解决PIL打开图片时的AttributeError问题
嘿,这个问题其实很好理解,我来给你拆解一下:
错误原因
你用glob.iglob()得到的marked是一个生成器对象,而PIL的Image.open()方法需要的是具体的文件路径字符串(或者可读取的文件对象)。生成器本身没有seek()方法(这个方法是文件对象用来移动读取指针的),所以就抛出了AttributeError: 'generator' object has no attribute 'seek'这个错误。
简单说就是:你给Image.open()传了一个它不认识的“东西”,它需要的是单个图片的路径,而不是一堆路径的生成器。
修复方案
方案1:遍历生成器逐个打开图片
glob.iglob()会逐个生成匹配的文件路径,你可以用循环遍历每个路径,再打开图片:
import glob from PIL import Image # 注意路径末尾要加/*,这样才能匹配Marked文件夹里的所有文件 for img_path in glob.iglob("D:/Users/username/Desktop/cells/Marked/*"): img = Image.open(img_path) img.show()
方案2:用glob.glob()获取路径列表再遍历
如果你想一次性拿到所有图片路径,也可以用glob.glob(),它会直接返回一个包含所有匹配路径的列表,再遍历这个列表即可:
import glob from PIL import Image # 获取Marked文件夹下所有文件的路径列表 img_paths = glob.glob("D:/Users/username/Desktop/cells/Marked/*") for img_path in img_paths: img = Image.open(img_path) img.show()
额外提醒
一定要记得在路径末尾加上/*,不然glob可能只会匹配到Marked这个文件夹本身,而不是里面的图片文件,那样打开的时候还是会报错哦~
内容的提问来源于stack exchange,提问作者Nick Rizzolo
相关产品推荐
相关产品推荐

