unutbu..
88
os.walk用途os.listdir.这是docstring os.listdir:
listdir(path) - > list_of_strings
返回包含目录中条目名称的列表.
path: path of directory to list
该列表按任意顺序排列.它不包括特殊条目'.' 和'..'即使它们存在于目录中.
(我的重点).
但是,您可以使用它sort来确保您想要的订单.
for root, dirs, files in os.walk(path):
for dirname in sorted(dirs):
print(dirname)
(注意,dirnames是字符串而不是int,所以将sorted(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):
要对字母数字字符串进行排序,请使用自然排序.
Python为避免记录任何可靠的顺序而避免记录任何可靠顺序的原因是它在不同的平台上使用不同的函数(`FindNextFileW`,`DosFindNext`,`readdir`),并且这些函数本身也记录在文件系统中.平台,文件系统通常不记录订单或给你一些完全无用的东西. (5认同)
我认为这不会对多级层次结构进行排序,因为`sorted`不是就地的.为此,请使用Alfe所解释的`sort`. (2认同)