操作系统错误:[Errno 24] 打开文件过多 Python,Ubuntu。

5
我将编写一段Python脚本,用于从目录加载图像并调整大小。但是,当我从目录加载图像时出现了以下错误。请参考以下内容:

我要写一个Python脚本,用于从目录加载图像并调整它们的大小。然而,当我从目录加载图像时,遇到了以下错误。

from os import listdir
from PIL import Image as PImage
import split_folders
import os, os.path


def loadImages(path):
    imagesList = listdir(path)
    loadedImages = []
    for image in imagesList:
        img = PImage.open(os.path.join(path,image))
        loadedImages.append(img)
    return loadedImages

path = "./Inputs/"
imgs = loadImages(path)

for img in imgs:
    print(img)

我在这里遇到了一个错误:“OSError: [Errno 24] Too many open files: '/home/thisuri/Documents/Re-Train_OCR/Inputs/00009690_B543XY65.png'”

以下是追踪信息:

Traceback (most recent call last):
  File "/home/thisuri/Documents/Re-Train_OCR/2.py", line 6, in <module>
  File "/usr/local/lib/python3.6/dist-packages/imageio/core/functions.py", line 221, in imread
  File "/usr/local/lib/python3.6/dist-packages/imageio/core/functions.py", line 136, in get_reader
  File "/usr/local/lib/python3.6/dist-packages/imageio/core/format.py", line 687, in search_read_format
  File "/usr/local/lib/python3.6/dist-packages/imageio/core/format.py", line 195, in can_read
  File "/usr/local/lib/python3.6/dist-packages/imageio/plugins/pillow.py", line 104, in _can_read
  File "/usr/local/lib/python3.6/dist-packages/imageio/core/request.py", line 447, in firstbytes
  File "/usr/local/lib/python3.6/dist-packages/imageio/core/request.py", line 456, in _read_first_bytes
  File "/usr/local/lib/python3.6/dist-packages/imageio/core/request.py", line 344, in get_file
OSError: [Errno 24] Too many open files: '/home/thisuri/Documents/Re-Train_OCR/Inputs/00009690_B543XY65.png'
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 674, in exec_module
  File "<frozen importlib._bootstrap_external>", line 780, in get_code
  File "<frozen importlib._bootstrap_external>", line 832, in get_data
OSError: [Errno 24] Too many open files: '/usr/lib/python3/dist-packages/apport/__init__.py'

Original exception was:
Traceback (most recent call last):
  File "/home/thisuri/Documents/Re-Train_OCR/2.py", line 6, in <module>
  File "/usr/local/lib/python3.6/dist-packages/imageio/core/functions.py", line 221, in imread
  File "/usr/local/lib/python3.6/dist-packages/imageio/core/functions.py", line 136, in get_reader
  File "/usr/local/lib/python3.6/dist-packages/imageio/core/format.py", line 687, in search_read_format
  File "/usr/local/lib/python3.6/dist-packages/imageio/core/format.py", line 195, in can_read
  File "/usr/local/lib/python3.6/dist-packages/imageio/plugins/pillow.py", line 104, in _can_read
  File "/usr/local/lib/python3.6/dist-packages/imageio/core/request.py", line 447, in firstbytes
  File "/usr/local/lib/python3.6/dist-packages/imageio/core/request.py", line 456, in _read_first_bytes
  File "/usr/local/lib/python3.6/dist-packages/imageio/core/request.py", line 344, in get_file
OSError: [Errno 24] Too many open files: '/home/thisuri/Documents/Re-Train_OCR/Inputs/00009690_B543XY65.png'

如何解决这个问题?

1
你要加载多少个文件?也许你应该分阶段进行处理(加载一些图像,处理它们,加载下一批图像,处理它们等)。文件和文件句柄/描述符通常是有限的资源。 - Some programmer dude
是的!我同意你的观点。这里我将加载 10,000 张图片。 - EverythingNeedToBeKnown
1个回答

5

打开文件后,您需要关闭它们。尝试使用下面的版本:

def loadImages(path):
    imagesList = listdir(path)
    loadedImages = []
    for image in imagesList:
        with open(os.path.join(path, image), 'rb') as i:
            img = PImage.open(i)
            loadedImages.append(img)
    return loadedImages

<PIL.PngImagePlugin.PngImageFile image mode=L size=128x64 at 0x7FE96C776748> - EverythingNeedToBeKnown
非常感谢@Burhan,它起作用了。我在上面提到了如何获得print(img)的输出。 - EverythingNeedToBeKnown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接