os.walk使用os.listdir。这里是os.listdir的docstring:
listdir(path) -> list_of_strings
Return a list containing the names of the entries in the directory.
06000
The list is in arbitrary order. It does not include the special
entries ‘.’ and ‘..’ even if they are present in the directory.
(我的强调)。
但是,你可以使用sort来确保你想要的顺序。
for root, dirs, files in os.walk(path):
for dirname in sorted(dirs):
print(dirname)
(注意dirnames是字符串不是ints,所以排序(dirs)将它们排序为字符串 – 这是一次需要。
正如Alfe和Ciro Santilli指出的,如果您希望按照排序的顺序递归目录,那么可以就地修改dirs:
for root, dirs, files in os.walk(path):
dirs.sort()
for dirname in dirs:
print(os.path.join(root, dirname))
你可以自己测试一下:
import os
os.chdir('/tmp/tmp')
for dirname in '1 10 11 12 2 20 21 22 3 30 31 32'.split():
try:
os.makedirs(dirname)
except OSError: pass
for root, dirs, files in os.walk('.'):
for dirname in sorted(dirs):
print(dirname)
打印
1
10
11
12
2
20
21
22
3
30
31
32
如果你想以数字顺序列出它们:
for dirname in sorted(dirs, key=int):