Frage

Im Grunde muss ich diese aktuelle URL und diese anderen Schlüssel, dass ich in eine neue URL fusionieren wollen, aber es gibt drei verschiedene Fälle.

Angenommen, die aktuelle URL ist localhost: 32401 / A / B / foo

, wenn Schlüssel bar dann will ich localhost zurück: 32401 / A / B / bar

Wenn Taste beginnt mit einem Schrägstrich und / A / Bar dann will ich zurückkehren localhost: 32401 / A / bar

schließlich, wenn Schlüssel eine eigene, unabhängige URL ist dann ich will nur, dass die Schlüssel zurückgeben = http://foo.com/ bar -> http://foo.com/bar

Ich nehme an, es ist eine Möglichkeit, zumindest die ersten beiden Fälle zu tun, ohne die Saiten manuell zu manipulieren, aber nichts sprang mir sofort im os.path Modul.

War es hilfreich?

Lösung

  

Ich nehme an, es ist eine Möglichkeit, zumindest die ersten beiden Fälle zu tun, ohne die Saiten manuell zu manipulieren, aber nichts sprang mir sofort im os.path Modul.

Das ist, weil Sie verwenden möchten, urllib.parse (für Python 3 .x) oder urlparse (für Python 2.x) statt.

Ich habe nicht viel Erfahrung mit ihm, obwohl, so hier ist ein Ausschnitt mit str.split() und 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)

Andere Tipps

Haben Sie ausgecheckt die urlparse Modul?

Aus den Dokumenten,

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

Should Hilfe bei Ihrem ersten Fall.

Natürlich können Sie immer für den Rest Grund String-Manipulation tun.

String-Objekte in Python haben alle starts und endswith Methoden, die der Lage sein, sollten Sie dorthin zu gelangen. So etwas wie dies vielleicht?

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top