我正在尝试在pyGTK中生成一个分层目录列表。
目前,我有以下目录树:
/root
folderA
- subdirA
- subA.py
- a.py
folderB
- b.py
我写了一个似乎起作用的功能:
def go(root, piter=None):
for filename in os.listdir(root):
isdir = os.path.isdir(os.path.join(root, filename))
piter = self.treestore.append(piter, [filename])
if isdir == True:
go(os.path.join(root, filename), piter)
这是我运行应用程序时得到的结果:
我还认为我的函数效率低下,我应该使用os.walk(),因为它已经存在了。
我怎么能用pyGTK生成目录树的正确/最有效的方法是什么?
--- ----编辑 我最终使用的代码块,有效,是:
parents = {}
for dir, dirs, files in os.walk(root):
for subdir in dirs:
parents[os.path.join(dir, subdir)] = self.treestore.append(parents.get(dir, None), [subdir])
for item in files:
self.treestore.append(parents.get(dir, None), [item])
答案 0 :(得分:1)
关于效果,this is a FAQ。
关于您的算法:当您将subdirA
piter
指向subdirA
时,当您到达a.py
piter
时,下一次迭代仍指向subdirA
正如您所说,使用os.walk
。