我一直在尝试将子目录添加到“项目”列表中,并已使用以下代码完成此操作。
root, dirs, files = iter(os.walk(PATH_TO_DIRECTORY)).next()
items = [{
'label': directory, 'path': plugin.url_for('test')
} for count, directory in enumerate(dirs)]
以上作品,但速度惊人。 os.walk非常快,但由于某种原因,循环很慢。
我试图一次性完成所有操作,在os.walk中添加“items”列表,如下所示
for root, dirs, files in os.walk(PATH_TO_DIRECTORY):
但无法获得将目录添加到列表中的正确语法。
os.walk的每一个例子我都可以在网上找到简单的print
目录或文件,这可以作为其使用的一个例子 - 但在现实世界中并不是很有用。
我是python的新手,今天才开始关注它。有人可以建议如何获得像我的第一个例子中的列表,但没有单独的循环?
(我意识到它被称为“目录”或python中的某个东西,而不是列表。让我们把它称为数组并完成它......: - )
由于
答案 0 :(得分:2)
我不知道plugin.url_for()会做什么,但你应该能够通过这种方式加快它的速度:
plugin_url_for = plugin.url_for
_, dirs, _ = iter(os.walk(PATH_TO_DIRECTORY)).next()
items = [{
'label': directory, 'path': plugin_url_for('test')
} for directory in dirs]
我删除了root文件变量,因为它似乎没有使用它,也删除了dirs上的枚举,因为你没有使用它。但是,如果你出于某些奇怪的原因需要它,请把它放回去。 请测试一下,如果有帮助请告诉我。我出于显而易见的原因无法正确测试它。
答案 1 :(得分:0)
dirlist = []
for root, dirs, files in os.walk(PATH_TO_DIRECTORY):
dirlist += dirs
应该做的伎俩!
对于你修改过的问题,我认为你真正需要的可能是输出:
Dirdict = {}
for (root, dirs, files) in os.walk (START):
Dirdict [root] = dirs
您可能希望或需要使用plugin_url(root)对root进行一些编码,这会为您提供一个字典,您可以在其中查找plugin_url(some_path)并获取该路径中所有目录的列表。你正在做的是用一个键创建一个字典列表。我怀疑你可能会在python 2.7中的集合中提供namedtupple,并在python 3中作为内置函数。