2016-01-20 4 views
0

Я ищу более Pythonic способ вернуть список всех родительских путей, включительно, из заданного пути.Вернуть список всех путей-предшественников/родительских объектов

Например, если:

"/dir1/dir2/dir3" 

Возврат:

["/dir1", "/dir1/dir2", "/dir1/dir2/dir3"] 

До сих пор я, по существу дела:

import os 
path = os.path.normpath(path) 
path_parts = path.split(os.sep) 

Затем итерация над частями, чтобы восстановить список. Я не могу не чувствовать, что это уродливый kludge, хотя ...

+0

Там нет встроенной функции, чтобы сделать что. Итак, я бы сказал, что вы делаете, хорошо. – thefourtheye

ответ

1

Я не знаю, если вы уже используете понимание списка, чтобы сделать это, так что, если нет, вы можете попробовать что-то вроде следующего:

import os 

def get_branch_dirs(dir): 
    levels = dir.split(os.path.sep) 
    return [os.path.sep.join(levels[:i+1]+[""]) for i in range(len(levels))] 

get_branch_dirs(dir="/dir1/dir2/dir3") 

ВЫВОД:

['/', '/dir1/', '/dir1/dir2/', '/dir1/dir2/dir3/'] 

вы можете настроить его, если вы ожидаете, что строка реж до конца в "/"



EDIT: На самом деле, я просто понял, что вы не хотите, корневой каталог в списке, так что попробуйте вместо этого:

def get_branch_dirs(dir): 
    levels = dir.split(os.path.sep) 
    return [os.path.sep.join(levels[:i + 1]) for i in range(len(levels))][1:] 


get_branch_dirs(dir="/dir1/dir2/dir3") 

ВЫВОД

['/dir1', '/dir1/dir2', '/dir1/dir2/dir3'] 
Смежные вопросы