#!/usr/bin/env python """ Create a dictionary of ascending (sequential) directories. """ def make_pathdict(keys, fspath = None): """Quickly create a dictionary of ascending path components. :param keys: list of dictionary keys (base -> root order) :returns: dictionary of keyed paths NOTICE: This does not check path-length::key-count, etc.! Also, not as robust as os.path in x-platform use. >>> fspath = "/and/the/player/asks/anyone/for_tennis.py" >>> keys = "base midl root".split() >>> ret_dict = make_pathdict(keys, fspath) >>> for k in keys: print "{0:<6}{1}".format(k, ret_dict[k]) base /and/the/player/asks/anyone midl /and/the/player/asks root /and/the/player """ from os import path as os_path _cache = {} fspath = os_path.abspath(fspath or __file__) # divide the path into len(keys) + 1 parts, the root, directories and file tokenz = fspath.rsplit(os_path.sep, len(keys)) # iterate the keys assigning the decreasing-lenght path-portions for idx, key in enumerate(keys): _cache[key] = os_path.join(*tokenz[:-(idx + 1)]) return _cache