Chemins de répertoire dans la manipulation Python
-
26-09-2019 - |
Question
En fait, je l'ai eu cette URL actuelle et cette autre clé que je veux fusionner en une nouvelle URL, mais il y a trois cas différents.
Supposons que l'URL actuelle est localhost: 32401 / A / B / foo
si la clé est bar alors je veux revenir localhost: 32401 / A / B / bar
si clé commence avec une barre oblique et est / A / bar je veux revenir localhost: 32401 / A / bar
enfin si la clé est son propre URL indépendante alors je veux juste revenir sur cette touche = http://foo.com/ bar -> http://foo.com/bar
Je suppose qu'il ya une façon de faire au moins les deux premiers cas, sans manipuler les chaînes manuellement, mais rien ne m'a sauté aux yeux immédiatement dans le module os.path.
La solution
Je suppose qu'il ya une façon de faire au moins les deux premiers cas, sans manipuler les chaînes manuellement, mais rien ne m'a sauté aux yeux immédiatement dans le module os.path.
C'est parce que vous voulez utiliser urllib.parse
(pour Python 3 .x) ou urlparse
(pour Python 2.x) à la place.
Je n'ai pas beaucoup d'expérience avec elle, cependant, donc voici un extrait en utilisant str.split()
et 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)
Autres conseils
Avez-vous vérifié le module urlparse ?
De la documentation,
from urlparse import urljoin
urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html')
devrait aider avec votre premier cas.
De toute évidence, vous pouvez toujours faire la manipulation de chaînes de base pour le reste.
objets String en Python ont toutes les méthodes de startswith et endsWith qui devraient être en mesure de vous arriver. Quelque chose comme cela peut-être?
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)