我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?
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()调用它的内置方法。