Pregunta

Básicamente Tengo esta URL actual y esta otra tecla que desea combinar en una nueva dirección URL, pero hay tres casos diferentes.

Supongamos que la URL actual es localhost: 32401 / A / B / foo

Si la clave es bar y luego quiero volver localhost: 32401 / A / B / bar

Si la clave comienza con una barra y es / A / bar y luego quiero volver localhost: 32401 / A / bar

Por último si la clave es su propia URL independiente, entonces sólo quiero volver a esa tecla = http://foo.com/ barra de -> http://foo.com/bar

Asumo que hay una manera de hacer al menos los dos primeros casos sin manipular manualmente las cuerdas, pero nada me llamó la atención de inmediato en el módulo os.path.

¿Fue útil?

Solución

  

Asumo que hay una manera de hacer al menos los dos primeros casos sin manipular manualmente las cuerdas, pero nada me llamó la atención de inmediato en el módulo os.path.

Esto se debe a que desea utilizar urllib.parse (para Python 3 .x) o urlparse (para Python 2.x) en su lugar.

No tengo mucha experiencia con él, sin embargo, lo que aquí es un fragmento usando str.split() y str.join().

urlparts = url.split('/')

if key.startswith('http://'):
    return key
elif key.startswith('/'):
    return '/'.join(urlparts[:2], key[1:])
else:
    urlparts[len(urlparts) - 1] = key
    return '/'.join(urlparts)

Otros consejos

¿Ha revisado el urlparse módulo?

A partir de la documentación,

from urlparse import urljoin
urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html')

debería ayudar con su primer caso.

Obviamente, siempre se puede hacer manipulación básica de cadena para el resto.

objetos de cadenas en Python todos tienen métodos startsWith y endsWith que deberían ser capaces de llegar hasta allí. Algo como esto tal vez?

def merge(current, key):
  if key.startswith('http'):
    return key
  if key.startswith('/'):
    parts = current.partition('/')
    return '/'.join(parts[0], key)
  parts = current.rpartition('/')
  return '/'.join(parts[0], key)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top