12

pathlib.Path().iterdir()用来获取路径的子字典。

在 下/home/yuanyi/workspace/app,有 4 个文件夹:01020304

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

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

4

2 回答 2

20

您可以使用“排序()”

内置函数 Python - sorted()

from pathlib import Path
for subdir in sorted(Path('/some/path').iterdir()):
    print(subdir)

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

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

于 2016-03-16T11:17:08.067 回答
3

认为你应该从中找出结果,

>>> 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
>>> 

或者

for i in sorted(l, key=lambda m: int(m.split(os.sep)[-1])):
    print i
于 2016-03-16T11:08:14.773 回答