微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

os.walk以什么顺序进行迭代?

如何解决os.walk以什么顺序进行迭代?

os.walk用途os.listdir。这是的文档字符串os.listdir

listdir(路径)-> 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)

(请注意,目录名是字符串而不是整数,因此将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):

要对字母数字字符串进行排序,请使用自然排序

解决方法

我担心给出的文件和目录的顺序os.walk()。如果我有这些目录,110111222021223303132,什么是输出列表的顺序?

它是按数值排序的吗?

1 2 3 10 20 30 11 21 31 12 22 32

或按ASCII值排序,如ls

1 10 11 12 2 20 21 22 3 30 31 32

此外,如何获得特定的排序?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。