Domanda

In fondo ho questa URL corrente e questo altro tasto che voglio a fondersi in un nuovo URL, ma ci sono tre casi differenti.

Si supponga che l'URL corrente è localhost: 32401 / A / B / foo

se la chiave è il bar poi voglio tornare localhost: 32401 / A / B / bar

Se si avvia chiave con una barra ed è / A / bar poi voglio tornare localhost: 32401 / A / bar

, infine, se la chiave è il proprio URL indipendente allora voglio solo tornare quel tasto = http://foo.com/ bar -> http://foo.com/bar

Presumo ci sia un modo per fare almeno i primi due casi senza manipolare le stringhe manualmente, ma niente è saltato fuori a me subito nel modulo os.path.

È stato utile?

Soluzione

  

Presumo ci sia un modo per fare almeno i primi due casi senza manipolare le stringhe manualmente, ma niente è saltato fuori a me subito nel modulo os.path.

Questo perché si desidera utilizzare urllib.parse (per Python 3 .x) o urlparse (per Python 2.x), invece.

Non ho molta esperienza con esso, però, ecco un frammento utilizzando str.split() e 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)

Altri suggerimenti

Hai controllato il urlparse modulo?

Dalla documentazione,

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

dovrebbe aiutare con il primo caso.

Ovviamente, si può sempre fare manipolazione delle stringhe di base per il resto.

String oggetti in Python tutti hanno startswith e EndsWith metodi che dovrebbero essere in grado di arrivare lì. Qualcosa di simile, forse?

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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top