[Linuxtrent] Re: esperti di shell...domandina!

  • From: Roberto Cavada <cavada@xxxxxx>
  • To: "linuxtrent@xxxxxxxxxxxxx" <linuxtrent@xxxxxxxxxxxxx>
  • Date: Wed, 25 Mar 2009 10:09:19 +0100

Lele Gaifax wrote:

    from os.path import join, dirname, normpath

(...)
Aah, la ruota ovale.

from os.path import relpath
(solo in 2.6)

Altrimenti e' piu' lungo (preso da 2.6 e adattato un pelo):

import os
import os.path
relpath = None

# ----------------------------------------------------------------------
def __posix_relpath(path, start=os.curdir):
    """Return a relative version of a path"""

    if not path: raise ValueError("no path specified")

    start_list = os.path.abspath(start).split(os.sep)
    path_list = os.path.abspath(path).split(os.sep)

    # Work out how much of the filepath is shared by start and path.
    i = len(os.path.commonprefix([start_list, path_list]))

    rel_list = [os.pardir] * (len(start_list)-i) + path_list[i:]
    if not rel_list: return os.curdir
    return os.path.join(*rel_list)

def __nt_relpath(path, start=os.curdir):
    """Return a relative version of a path"""

    if not path: raise ValueError("no path specified")

    start_list = os.path.abspath(start).split(os.sep)
    path_list = os.path.abspath(path).split(os.sep)
    if start_list[0].lower() != path_list[0].lower():
        unc_path, rest = os.path.splitunc(path)
        unc_start, rest = os.path.splitunc(start)
        if bool(unc_path) ^ bool(unc_start):
raise ValueError("Cannot mix UNC and non-UNC paths (%s and %s)" % (path, start)) else: raise ValueError("path is on drive %s, start on drive %s" % (path_list[0], start_list[0]))
    # Work out how much of the filepath is shared by start and path.
    for i in range(min(len(start_list), len(path_list))):
        if start_list[i].lower() != path_list[i].lower():
            break
    else: i += 1

    rel_list = [os.pardir] * (len(start_list)-i) + path_list[i:]
    if not rel_list: return os.curdir
    return os.path.join(*rel_list)


try:
    import os.path.relpath
    relpath = os.path.relpath
except ImportError: relpath = __nt_relpath if os.name == 'nt' else __posix_relpath

--
Per iscriversi  (o disiscriversi), basta spedire un  messaggio con OGGETTO
"subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx


Other related posts: