[pyar] Consulta: paths relativos

Claudio Freire klaussfreire en gmail.com
Mar Abr 10 13:36:54 ART 2012


On Tue, Apr 10, 2012 at 1:03 PM, Roberto Alsina
<ralsina en netmanagers.com.ar> wrote:
>>>> rel_link("/foo/bar/baz/index.html", "/foo/index.html")
> ... "../../index.html"
>
>>>> rel_link("/foo/bar/baz/index.html", "/foo/")
> ... "../../"
>
>>>> rel_link("/foo/bar/baz/index.html", "/foo")
> ... "../.."


Bue, primero tenés que buscar prefijos comunes. No conozco una manera
muy linda de hacerlo eficiente:

def splitprefix(a,b):
   for pos,(ca,cb) in enumerate(zip(a,b)):
       if ca != cb:
          return a[:pos], a[pos:], b[pos:]
   else:
       pos += 1
       if pos < len(a):
           return a[:pos], a[pos:], b[pos:]
       else:
           return b[:pos], a[pos:], b[pos:]

Luego:

def rel_link(a,b):
    prefix, a, b = splitprefix(a,b)
    if not prefix:
       return b
    else:
       nivel_a = sum(map("/".__eq__, a))
       return os.path.join("../"*nivel_a, b)


Esto funciona 10 puntos excepto para "/foo", por el matcheo de
prefijo, que debería matchear sólo componentes de directorio completo.
Lo dejo como tarea para el lector ;)



More information about the pyar mailing list