当前位置: 首页 > 面试题库 >

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

白翰海
2023-03-14
问题内容

我担心给出的文件和目录的顺序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

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


问题答案:

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

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



 类似资料:
  • 问题内容: 我有以下查询: 我有以下问题: USING语法与ON语法同义吗? 这些联接是从左到右评估的吗?换句话说,此查询是否说:x =公司加入了用户;y = x JOIN工作;z = y加入用户帐户; 如果对问题2的回答为“是”,那么可以安全地假设“公司”表中包含“公司ID”,“用户ID”和“工作ID”列? 我不明白在引用别名“ j”时,如何使用WHERE子句来选择公司表上的行 任何帮助,将不胜

  • 问题内容: 我正在阅读一本关于线程/同步的简单示例,该书声称使用会允许在同一实例上调用一个线程来访问该方法。它确实按照承诺进行了序列化,但似乎在 下面的方法中创建的第三个数组的大约9/10倍于第二个数组。该代码是示例代码,显示了没有同步方法的问题。 这本书说明了两种方式来处理这个问题,他们是- 并且 很显然,这两种选择工作,因为,相对于原来的代码,括号内的字都像一致… [您好] [世界](大约90

  • 问题内容: 我有一个导航栏作为地图: 其中具有各种属性,子项等。当我尝试渲染导航栏(带有)时,它以随机顺序显示。我知道它在运行时会随机排序,但是似乎无法获取有序的键列表或按插入顺序进行迭代。 游乐场链接位于此处:http : //play.golang.org/p/nSL1zhadg5,尽管它似乎没有表现出相同的行为。 如何在不破坏插入顺序的情况下迭代此映射? 问题答案: Go地图不保持插入顺序;

  • 问题内容: 如果我有一行这样的代码 和…一样吗 要么 ? 问题答案: 这应该使事情更清晰。简单地说,投优先除法运算,所以这将 是同样的事情 给输出相同 编辑: 正如knoight所指出的,这在技术上与没有括号的操作不一样,因为它们也具有优先权。但是,出于本示例的目的,它将提供相同的结果,并且对于所有意图和目的都是等效的。

  • 问题内容: 我有一个HashMap,每次我获得迭代器时,我都希望以不同的随机顺序迭代它们的键值对。从概念上讲,我想在调用迭代器之前对地图进行“混洗”(或者,如果需要,可以对迭代器进行“混洗”)。 我有两种选择: 1)使用LinkedHashMap的方法,并在内部保留条目列表,将其随机洗净,并在调用迭代器时返回该视图。 2)使用map.entrySet(),构造一个ArrayList并在其上使用sh

  • 问题内容: 我需要一个Map,它可以 按其值 的降序进行迭代。是否有像Apache Commons或Guava这样的标准库提供这种地图? 问题答案: 我会用番石榴来做到这一点,如下所示: