Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中如何控制迭代器结果的顺序_Python_Iterator_Pathlib - Fatal编程技术网

python中如何控制迭代器结果的顺序

python中如何控制迭代器结果的顺序,python,iterator,pathlib,Python,Iterator,Pathlib,我使用pathlib.Path().iterdir()获取路径的子字典。 在“/home/yuanyi/workspace/app”下,有4个floder:“01”、“02”、“03”、“04” from pathlib import Path for subdir in Path('/home/yuanyi/workspace/app').iterdir(): print(subdir) 但结果并不有序 /home/yuanyi/workspace/app/02 /home/yuan

我使用pathlib.Path().iterdir()获取路径的子字典。 在“/home/yuanyi/workspace/app”下,有4个floder:“01”、“02”、“03”、“04”

from pathlib import Path
for subdir in Path('/home/yuanyi/workspace/app').iterdir():
    print(subdir)
但结果并不有序

/home/yuanyi/workspace/app/02
/home/yuanyi/workspace/app/03
/home/yuanyi/workspace/app/01
/home/yuanyi/workspace/app/00
结果并非如下所示:

/home/yuanyi/workspace/app/01
/home/yuanyi/workspace/app/02
/home/yuanyi/workspace/app/03
/home/yuanyi/workspace/app/04

我想知道迭代器是如何工作的,以及获得有序结果的最佳方法是什么。

您认为应该从中找出结果

>>> l = ['/home/yuanyi/workspace/app/02',
'/home/yuanyi/workspace/app/03', '/home/yuanyi/workspace/app/01']
>>> for i in sorted(l, key=lambda m: int(m.split('/')[-1])):
    print i


/home/yuanyi/workspace/app/01
/home/yuanyi/workspace/app/02
/home/yuanyi/workspace/app/03
>>> 

您可以使用“sorted()


注意:@NamitJuneja指出,这会将对生成器的迭代更改为对列表的迭代。因此,如果内存中有大量文件,将它们全部加载到内存中(通过将它们加载到列表中)可能会导致问题


在我的Mac上,iterdir()方法返回已排序的列表。因此,这看起来取决于系统。您使用的是什么操作系统?

嗯,您的意思是我需要做一些其他工作来排序订单吗?有什么迭代器方法可以得到有序的结果吗?非常好的尝试,但是只有
os.walk()
保证。我相信这是一个小例子,但这可能是海报所期望的。不幸的是,没有一个
Pathlib
变体提供这种保证,因此用户必须实现自己的排序。如何进行自上而下的排序?啊,是的,我通过筛选找到了答案:所以
iterdir()
使用
listdir()
glob()
使用
scandir()
。Scandir从
os
模块中拾取。由于
os.walk()
也使用了
scandir()
,因此它看起来最接近
os.walk()
的是
pathlib.glob()
,但我不确定如何使用它使其看起来像
os.walk()
输出(艺术)。如果您想知道为什么Pathlib的某些部分使用
listdir()
它是一个。出于兴趣,您使用的是什么操作系统?这会将对生成器的迭代更改为对列表的迭代。因此,如果内存中有大量文件,将它们全部加载到内存中(通过将它们加载到列表中)可能会导致问题谢谢,@NamitJuneja,我已将您的评论合并到答案中。编辑你认为合适!
for i in sorted(l, key=lambda m: int(m.split(os.sep)[-1])):
    print i
from pathlib import Path
for subdir in sorted(Path('/some/path').iterdir()):
    print(subdir)