Source code for magni.utils._util

"""
..
    Copyright (c) 2014-2017, Magni developers.
    All rights reserved.
    See LICENSE.rst for further information.

Module providing the public function of the magni.utils subpackage.

"""

from __future__ import division

import os

from magni.utils.validation import decorate_validation as _decorate_validation
from magni.utils.validation import validate_generic as _generic


[docs]def split_path(path): """ Split a path into folder path, file name, and file extension. The returned folder path ends with a folder separation character while the returned file extension starts with an extension separation character. The function is independent of the operating system and thus of the use of folder separation character and extension separation character. Parameters ---------- path : str The path of the file either absolute or relative to the current working directory. Returns ------- path : str The path of the containing folder of the input path. name : str The name of the object which the input path points to. ext : str The extension of the object which the input path points to (if any). Examples -------- Concatenate a dummy path and split it using the present function: >>> import os >>> from magni.utils._util import split_path >>> path = 'folder' + os.sep + 'file' + os.path.extsep + 'extension' >>> parts = split_path(path) >>> print(tuple((parts[0][-7:-1], parts[1], parts[2][1:]))) ('folder', 'file', 'extension') """ @_decorate_validation def validate_input(): _generic('path', 'string') validate_input() path = os.path.realpath(str(path)) pos = str.rfind(path, os.path.sep) + 1 path, name = path[:pos], path[pos:] if os.path.extsep in name: pos = str.rfind(name, os.path.extsep) name, ext = name[:pos], name[pos:] else: ext = '' return (path, name, ext)