os.walk但目录位于顶部?

时间:2019-01-28 09:48:42

标签: python python-3.x

我有一些简单的代码可以打印出目录的结构。 我的示例目录ABC包含包含A的子目录A.txt,包含Z的子目录Z.txt和文件info.txt。在实际使用中,这将是许多文件和嵌套目录的大集合。

import os
topdir = 'ABC/'
for dirpath, dirnames, files in os.walk(topdir):
    print(os.path.join(dirpath))
    for name in files:
        print(os.path.join(dirpath, name))

输出为:

ABC/
ABC/info.txt
ABC/A
ABC/A/A.txt
ABC/Z
ABC/Z/Z.txt

如何使目录在顶部进行处理/打印? 我希望输出复制在Windows资源管理器中看到的内容,该资源管理器首先显示目录,然后显示文件。

我想要的输出:

ABC/
ABC/A
ABC/A/A.txt
ABC/Z
ABC/Z/Z.txt
ABC/info.txt

1 个答案:

答案 0 :(得分:3)

如果不将所有文件存储在列表中并以一种或另一种方式对该列表进行排序,则可以执行递归功能,并首先递归到目录结构的下一个级别,然后再在当前级别上打印文件:

for _ in dirnames

使用堆栈也可以完成相同的操作,但是我认为这样更清晰一些。是的,这还将一些目录存储在列表中/堆栈中,但不是所有文件,而是与嵌套目录级别一样多。

编辑:存在一个问题,即在生成器上打印任何下一个目录,即使该目录不是子目录而是同级(或“叔叔”或其他)。 {{1}}循环应解决此问题,对每个子目录(如果有)进行一次递归调用。该目录本身不必作为参数传递,因为它将从生成器中获取。