Python os.walk()是否反转?

Python os.walk()是否反转?,python,Python,当我运行os.walk()时,我会以字母数字顺序得到结果;从0开始,在z结束。有可能扭转这种局面吗 如果我有3个目录苹果/,香蕉/,梨/,我想要梨/,香蕉/和苹果/返回 显然,我可以将所有目录存储为一个列表,然后.reverse(),但这需要很长时间。首先,没有指定目录返回的顺序,因此如果我是你,我就不会依赖字母顺序 话虽如此,您可以选择子目录的遍历顺序,方法是将其设置为默认值(True),然后对dirs进行排序: import os top='/home/aix' for root, dirs

当我运行
os.walk()
时,我会以字母数字顺序得到结果;从0开始,在z结束。有可能扭转这种局面吗

如果我有3个目录<代码>苹果/,
香蕉/
梨/
,我想要
梨/
香蕉/
苹果/
返回

显然,我可以将所有目录存储为一个列表,然后
.reverse()
,但这需要很长时间。

首先,没有指定目录返回的顺序,因此如果我是你,我就不会依赖字母顺序

话虽如此,您可以选择子目录的遍历顺序,方法是将其设置为默认值(
True
),然后对
dirs
进行排序:

import os
top='/home/aix'
for root, dirs, files in os.walk(top, topdown=True):
  print root
  dirs.sort(reverse=True)
这将使
os.walk()
按名称的相反字典顺序遍历子目录

说明了这是如何工作的:

top-down
True
时,调用者可以就地修改目录名列表(可能使用
del
或slice赋值),并且
walk()
只会递归到名称保留在
dirnames
中的子目录中;这可以用来删减搜索,强制执行特定的访问顺序,甚至在再次恢复
walk()
之前通知调用方创建或重命名的目录


不能以任何常规方式反转生成器。唯一的解决方案是将其转换为一个序列,并以相反的顺序在该序列上迭代。在计算出早期的项之前,不一定知道生成器的后期项

下面的解决方案使用反向。如果目录结构不是很深,那么性能应该很好

import os

directory = '/your/dir/'
for root, dirs, files in reversed(list(os.walk(directory))):
    print root, dirs, files

您需要了解,您实际上可以修改
os.walk
使用的
dirs
。 (至少除非您明确地设置了
top-down=False

特别是,例如,您可以删除目录或访问列表

import os
for root, dirs, files in os.walk(startdir):
    dirs.sort(reverse=True)
    # Also remove dirs you do not need!

实际上,我应该在不增加任何额外成本的情况下完成这项工作。

因为我正在处理一组非常大的目录,这些目录都是按数字顺序排列的,我希望先看到最高的数字。谢谢。阅读之前的文档,但没有意识到这意味着你可以随时重新订购。