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.

Était-ce utile?

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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top