glob.glob( "**/*.jpg" ) 作为迭代器还是延迟加载?



我想知道是否可以使用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

最新更新