访问 os.scandir 中的第一个元素

San*_*idi 1 python python-3.x

os.scandir用于获取文件夹中的文件列表:

img_list2 = os.scandir('/home/shared/test')
Run Code Online (Sandbox Code Playgroud)

我想获得第一个元素。

我在尝试 img_list2.next()

>>> img_list2.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'posix.ScandirIterator' object has no attribute 'next'
Run Code Online (Sandbox Code Playgroud)

所以我试过:

>>> filt = list(img_list2)
>>> type(filt)
<class 'list'>
>>> globals()['filt']
[<DirEntry 'panaroma00010.jpg'>, <DirEntry 'panaroma00014.jpg'>, <DirEntry 'panaroma00004.jpg'>, <DirEntry 'panaroma00013.jpg'>, <DirEntry 'panaroma00007.jpg'>, <DirEntry 'panaroma00011.jpg'>, <DirEntry 'panaroma00012.jpg'>, <DirEntry 'panaroma00006.jpg'>, <DirEntry 'panaroma00009.jpg'>, <DirEntry 'panaroma00001.jpg'>, <DirEntry 'panaroma00003.jpg'>, <DirEntry 'panaroma00005.jpg'>, <DirEntry 'panaroma00002.jpg'>, <DirEntry 'panaroma00008.jpg'>]
>>> filt[1]
<DirEntry 'panaroma00014.jpg'>
>>> 
Run Code Online (Sandbox Code Playgroud)

所以就像在列表中我们可以获得第一个元素值,我们可以从os.scandir?

Jim*_*ard 5

os.scandir()返回包含给定路径的目录条目的迭代器,请参阅help(os.scandir)

scandir(...)
    scandir(path='.') -> iterator of DirEntry objects for given path
Run Code Online (Sandbox Code Playgroud)

要从中获取值,请调用内置函数next

next(img_list2)
Run Code Online (Sandbox Code Playgroud)

这将从迭代器返回值,直到它耗尽(并被StopIteration提升)。

您也可以将它包装在一个list调用中,该调用list从所有条目中创建一个并使其可索引,但如果您只需要第一个元素就太过分了。

iterator.next()Python 3.0with 开始被删除PEP 3114;一个 dunderiterator.__next__()方法将它替换为next()调用它的内置方法。