0

我的目标是将所有文件和目录存储在结构化数据树中,其中每个:

  • 目录是一个节点
  • 文件是一片叶子

我下面的代码工作正常。但是,我一次只采取一个步骤并中断/重新启动每个目录的遍历过程。(见step_in()方法)

显然,有可能并被认为是“高级”的,可以进入迭代过程本身并使用它。因此我的问题是,是否有可能“闯入” os.walk 进程并产生必要的东西?

import os
import sys
import inspect

DEBUG = True

def report(*args,**kwargs):
    global DEBUG
    if DEBUG: print(*args,**kwargs)

class directory:

    def __init__(self, path):

        self.path = path

    @property
    def name(self):
        return os.path.basename(self.path)

    def __repr__(self):
        ID = hex(id(self))
        return "<directory \"{:}\" at {}>".format(self.name,ID)

    def step_in(self):
        """Step into the dir and find all files/dirs.

        Step into the directory path and search for:
          - directories --> add string name to children (SEMI CHILD)
          - and files --> add string name to leafs
        """
        for p,d,f in os.walk(self.path):
            self.children = d
            report("--->kids found : {}".format(d))
            self.leafs = f
            report("--->leafs found: {}".format(f))
            return p


class walker:

    def __init__(self, root_path):

        self.root = directory(root_path)

    def walk(self, target=None):
        """Walk through all dirs and create tree.

        Recursive process with root directory as initial directory.
        """
        if not(target):
            target = self.root

        path = target.step_in()

        for i in range(len(target.children)):

            #get the next path
            next_path = os.path.join(path,target.children[i])
            report("\nnext is: {}".format(next_path))

            #save dir by replacing the string child with an actual child
            target.children[i] = directory(next_path)

            #walk into that child
            self.walk(target.children[i])

if __name__ == "__main__":

    w = walker('/Users/xxx/test/xxx')
    w.walk()
4

0 回答 0