python os.walk 排序_os.walk迭代迭代的顺序是什么?

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认同)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值