Manipolazione percorsi di directory in Python
-
26-09-2019 - |
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.
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)