在Pillow中打开和加载图像时出现"打开文件太多"错误

yan*_*nis 7 python pillow

运行以下代码时:

KEEP=[]
for file in glob.glob("./KEEP/thing*.[tT][iI][fF]"):
    m = pattern.search(file)
    filename=m.group(1)
    keep=Image.open(file)
    keep.load()
    KEEP.append(keep)
    KEEP_NAMES.append(filename)
    keep.close()
Run Code Online (Sandbox Code Playgroud)

超过一千个文件,我收到错误消息:

Traceback (most recent call last):
  File "/hom/yannis/texmf/python/remove-harakat.py", line 123, in <module>
  File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 2237, in open
IOError: [Errno 24] Too many open files: './KEEP/thing1118_26.TIF'
Run Code Online (Sandbox Code Playgroud)

我不明白为什么会这样,因为我加载()然后关闭()所有文件,为什么它们应该保持打开状态?有没有解决这个问题的方法,除了减少文件数量(这不是我的选择)?在内存中读取内容后关闭它们的一些方法?

ind*_*lit 10

这可能是该Image.load方法的一个错误- 请参阅Pillow问题#1144.我遇到了同样的too many open files错误 - 见#1237.

我的解决方法是将图像加载到临时对象,制作副本,然后显式关闭临时对象.对于您的代码,它看起来像这样:

KEEP=[]
for file in glob.glob("./KEEP/thing*.[tT][iI][fF]"):
    m = pattern.search(file)
    filename = m.group(1)
    temp = Image.open(file)
    keep = temp.copy()
    KEEP.append(keep)
    KEEP_NAMES.append(filename)
    temp.close()
Run Code Online (Sandbox Code Playgroud)