gpt4 book ai didi

python - os.walk 但目录在顶部?

转载 作者:太空宇宙 更新时间:2023-11-03 15:36:42 26 4
gpt4 key购买 nike

我有一些简单的代码可以打印出目录的结构。我的示例目录 ABC 包含包含 A.txt 的子目录 A,包含 Z.txt 的子目录 Z 和一个文件 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

最佳答案

如果不将所有文件存储在一个列表中并以一种或另一种方式对该列表进行排序,您可以创建一个递归函数并在打印当前级别的文件之前首先递归到目录结构的下一级:

def print_dirs(directories):
try:
dirpath, dirnames, files = next(directories)
print(dirpath) # print current path; no need for join here
for _ in dirnames: # once for each sub-directory...
print_dirs(directories) # ... recursively call generator
for name in files: # now, print files in current directory
print(os.path.join(dirpath, name))
except StopIteration:
pass

print_dirs(os.walk(topdir))

堆栈也可以这样做,但我认为这样更清晰一些。是的,这也会将一些目录存储在列表/堆栈中,但不是所有文件,而是与嵌套目录级别一样多。

编辑:这在生成器上打印 any 下一个目录时出现问题,即使那不是子目录而是兄弟目录(或“叔叔”或其他)。 for _ in dirnames 循环应该解决这个问题,对每个子目录(如果有的话)进行一次递归调用。目录本身不必作为参数传递,因为它将从生成器中获取。

关于python - os.walk 但目录在顶部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54399251/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com