我想知道是否可以使用glob.glob("**/*.jpg")
以便在几个文件夹中获取所有图像,但作为迭代器以避免填充内存
目前,我正在使用glob下面的代码:
for file in glob.glob("**/*.jpg")[:1]:
print(file)
但是我用
for model_folder in os.scandir(folder):
for model_folder_content in os.scandir(model_folder):
print(model_folder_content)
第一种方法的问题是,如果有很多文件可以填满内存并且失败,那么这个想法是使用scandir,因为返回一个迭代器,但是可以选择使用模式。
这可能吗?
感谢您可以使用global .iglob():
glob.iglob(pathname, *, recursive=False) Return an iterator which yields the same values as glob() without actually storing them all simultaneously.
您可以使用pathlib.Path.rglob()
,它返回一个generator
:
>>> from pathlib import Path
>>> folder = Path('/home/accdias')
>>> jpgs = folder.rglob('*.jpg')
>>> type(jpgs)
<class 'generator'>
>>>
glob模块有一个专门的方法来解决这个特殊的问题,称为iglob()
,它接受与glob()
相同的参数,并返回一个迭代器而不是一个列表。
iglob
的文档说明如下:
返回一个迭代器,该迭代器产生与glob()相同的值实际上是同时存储它们。
在您的例子中,代码片段可能看起来像:
for file in glob.iglob("**/*.jpg"):
# do something with the file