0

我有这个算法可以从我的文件夹结构中生成 MPTT: https ://gist.github.com/unbracketed/946520

在 github 上找到,非常适合我的需要。目前我需要添加跳过树中某些文件夹的功能。例如,我想跳过 /tmp/A/B1/C2 中/下的所有内容。所以我的树不会包含来自 C2 的任何东西(包括 C2)。

我在 python 中并不是那么没用,所以我创建了那个查询(并将额外的列表传递给函数):

def is_subdir(path, directory):
    path = os.path.realpath(path)
    directory = os.path.realpath(directory)
    relative = os.path.relpath(path, directory)
    return not relative.startswith(os.pardir + os.sep)

/Now we can add somewhere
for single in ignorelist:
    if fsprocess.is_subdir(node,single):

但我的问题是在哪里坚持这个功能?我已经尝试在顶部和 if do return 但退出我的整个应用程序。它反复调用自己,所以我很迷茫。

有什么好的建议吗?我试过在 github 上联系脚本创建者没有所有者。这个算法真的很棒,节省了我很多时间,非常适合我们的项目需求。

4

1 回答 1

0
def generate_mptt(root_dir):
    """
    Given a root directory, generate a calculated MPTT
    representation for the file hierarchy
    """
    for root, dirs, _ in os.walk(root_dir):

你的支票应该放在这里:

        if any(is_subdir(root, path) for path in ignorelist):
           del dirs[:] # don't descend
           continue

有点像。假设is_subdir(root, path)返回Trueifroot是 的子目录path

        dirs.sort()
        tree[root] = dirs
    preorder_tree(root_dir, tree[root_dir])
    mptt_list.sort(key=lambda x: x.left)
于 2015-09-14T11:32:36.800 回答