为何os.walk()的目录遍历顺序不受topdown参数影响?
问题分析与解决方案
问题本质
os.walk的topdown参数控制的是遍历的层级顺序(True时先遍历根目录再遍历子目录,False时先遍历所有子目录再回到根目录),但它不会改变同级目录的返回顺序。你看到两次输出一致,是因为无论topdown取值如何,当遍历到Images根目录时,返回的dirs列表是系统原生的目录顺序,默认未做排序。
解决方案
要得到预期的按名称排序的目录输出,需要手动对dirs列表进行排序,有两种常见方式:
方式1:遍历前排序
直接在打印时对dirs做排序处理:
import os image_dir = os.walk("Images") for root, dirs, files in image_dir: for d in sorted(dirs): print(d)
方式2:修改os.walk的dirs列表(仅topdown=True时生效)
当topdown=True时,修改dirs列表会影响后续的遍历顺序,这里可以原地排序:
import os for root, dirs, files in os.walk("Images", topdown=True): dirs.sort() for d in dirs: print(d)
两种方式都能输出你预期的顺序:
n01440764 n01443537
内容的提问来源于stack exchange,提问作者HeuristicPointer
相关产品推荐
相关产品推荐

