gpt4 book ai didi

python - 遍历/遍历任意深度的嵌套字典(字典表示目录树)

转载 作者:太空狗 更新时间:2023-10-29 21:22:56 29 4
gpt4 key购买 nike

撰写本文时是 Python 新手。

这是因为我希望用户能够从一个目录(以及任何子目录)中选择一组文件,不幸的是,Tkinter 在文件对话框中选择多个文件的默认功能在 Windows 7 上被破坏了( http://bugs.python.org/issue8010 ).

所以我试图通过另一种方法(仍然使用 Tkinter)来表示目录结构:构建目录结构的复制品,由带标签和缩进的复选框(在树中组织)组成。所以像这样的目录:

\SomeRootDirectory
\foo.txt
\bar.txt
\Stories
\Horror
\scary.txt
\Trash
\notscary.txt
\Cyberpunk
\Poems
\doyoureadme.txt

看起来像这样(# 代表复选按钮):

SomeRootDirectory
# foo.txt
# bar.txt
Stories
Horror
# scary.txt
Trash
# notscary.txt
Cyberpunk
Poems
# doyoureadme.txt

使用我在 ActiveState 中找到的特定方法(见下文)从目录结构构建原始字典很容易,但是当我尝试迭代剩下的嵌套良好的字典时,我碰壁了。

最佳答案

这是一个打印所有文件名的函数。它遍历字典中的所有键,如果它们映射到不是字典的东西(在你的例子中是文件名),我们会打印出名称。否则,我们调用映射到的字典上的函数。

def print_all_files(directory):

for filename in directory.keys():
if not isinstance(directory[filename], dict):
print filename
else:
print_all_files(directory[filename])

因此可以修改这段代码来做任何你想做的事,但这只是一个例子,说明你如何通过使用递归来避免固定深度。

要理解的关键是每次调用 print_all_files 时,它不知道它在树中有多深。它只是查看那里的文件,然后打印名称。如果有目录,它只会在目录上运行。

关于python - 遍历/遍历任意深度的嵌套字典(字典表示目录树),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7738402/

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