2012-05-10 3 views
2

У меня есть скрипт python, который отслеживает несколько имен каталогов как отдельные переменные. Некоторые из этих каталогов могут существовать, в то время как другие могут потребоваться создать во время выполнения.Управление путями дерева каталогов в python

Например, если у меня есть это дерево каталогов:

./top 
    /a 
     /a1 
     /a2 
    /b 
     /b1 
    /c 

я в настоящее время отслеживать все имена каталогов пути с отдельными переменными:

top_path = os.path.join(os.curdir, 'top') 
a_path = os.path.join(top_path, 'a') 
# etc... 

, но было бы неплохо организовать их в каким-то образом, который уважает дерево каталогов, если не поддерживает фактическую поддержку ОС.

Есть ли стандартный способ управления деревом каталогов (или любым деревом переменных) в python? Или я должен просто хранить все во вложенном списке или кортеже, или даже создавать свой собственный класс? Что-то с хорошим API, вроде top.a.a1, возвращающим «./top/a/a1» было бы здорово.

ответ

3

Как насчет диктата? Что-то вроде:

tree = { 
     'top': { 
       'a': { 
        'path': a_pathvar, 
        'a1': 
        'a2': 
       } 
       'b': { 
        'path': b_pathvar, 
       } 
     } 
     } 

Затем вы можете легко получить доступ к переменной пути для a1 с tree['top']['a']['a1']['path']. Вы можете легко создать эту структуру дерева с одной строки кода:

def tree(): return defaultdict(tree) 

Приятным свойством этой структуры является то, что промежуточные ключи не должны существовать, если вы пытаетесь создать путь:

tree['top']['a']['long']['tree']['path'] = path_var 

Это будет автоматически создавать промежуточные ключи для вас

This страница перейдет к более подробной информации.

Смежные вопросы