[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