Python的os.walk函数几乎就是我想要的,但我需要为每个目录做一个前后遍历操作。
e.g。如果树是
foo/
foo/bar/
foo/bar/baz/
foo/quux/
然后我想做这个序列:
pre-action on foo/
pre-action on foo/bar/
pre-action on foo/bar/baz/
post-action on foo/bar/baz/
post-action on foo/bar/
pre-action on foo/quux/
post-action on foo/quux/
post-action on foo/
我该怎么做? (没有写我自己的功能)
答案 0 :(得分:2)
如果您不想自己编写简单的递归函数,可以使用自己的堆栈:
stack = []
for root, dirs, files in os.walk("foo"):
while stack and not root.startswith(stack[-1]):
print "post-action on", stack.pop()
print "pre-action on", root
stack.append(root)
while stack:
print "post-action on", stack.pop()
编写自己的函数可能会提供更易读的代码:
def walk(dir):
print "pre-action on", dir
for name in os.listdir(dir):
fullname = os.path.join(dir, name)
if os.path.isdir(fullname):
walk(fullname)
print "post-action on", dir
答案 1 :(得分:0)
topdown=True
[link] 来限制实际返回给您的步数。这可以允许您仅对搜索中的某些目录执行操作。最好的例子在文档中给出。这可能会解决您的问题。