Manipulieren Verzeichnispfade in Python
-
26-09-2019 - |
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.
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)