2015-09-14 1 views
0
Алгоритм Построения

Я получил этот алгоритм для генерации MPTT из моей структуры папок: https://gist.github.com/unbracketed/946520MPTT Модификация

Найдена на GitHub и отлично работает для моих потребностей. В настоящее время у меня есть требование добавить к нему функциональность пропуска некоторых папок в дереве. Например, я хочу пропустить все в/under/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): 

Но мой вопрос куда приткнуть в функции? Я пробовал это сверху и в том случае, если возвращаюсь, но это выходит из всего моего приложения. Это повторяющийся вызов, поэтому я довольно потерян.

Любые полезные советы? Я пробовал использовать создателя скрипта на сайте github. Действительно хорошая работа с этим алгоритмом, избавит меня от времени и идеально подходит для наших требований к проекту.

ответ

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) возвращает True, если root является подкатегорией path.

 dirs.sort() 
     tree[root] = dirs 
    preorder_tree(root_dir, tree[root_dir]) 
    mptt_list.sort(key=lambda x: x.left)