在撰写本文时,Python 新手。
出现这个问题是因为我希望用户能够从一个目录(以及任何子目录)中选择一组文件,不幸的是,Tkinter 在文件对话框中选择多个文件的默认功能在 Windows 7 上被破坏了(http://bugs.python.org/issue8010 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 时,它都不知道它在树中的深度。它只是查看那里的文件,并打印名称。如果有导演,它就会在他们身上自行运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)