[pyar] Consulta: paths relativos

Hernan Grecco hernan.grecco en gmail.com
Mar Abr 10 13:38:57 ART 2012


Python tiene una function para buscar el prefijo comun:

os.path.commonprefix(list)

http://docs.python.org/library/os.path.html

Hernan

2012/4/10 Claudio Freire <klaussfreire en gmail.com>:
> 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 ;)
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de Argentina - http://www.usla.org.ar



More information about the pyar mailing list