Манипулирующие пути каталога в Python
-
26-09-2019 - |
Вопрос
По сути, у меня есть этот текущий URL и этот другой ключ, который я хочу объединиться в новый URL, но есть три разных случая.
Предположим, что текущий URL является localhost: 32401 / A / B / Foo
Если ключ в баре, то я хочу вернуть localhost: 32401 / a / b / bar
Если ключ начинается с Slash и / a / бар, то я хочу вернуть localhost: 32401 / a / bar
Наконец, если ключ является его собственным независимым URL, то я просто хочу вернуть этот ключ = http://foo.com/bar. -> http://foo.com/bar.
Я предполагаю, что есть способ сделать как минимум первые два случая без манипулирования строками вручную, но ничто не выскочило у меня сразу в модуле OS.Path.
Решение
Я предполагаю, что есть способ сделать как минимум первые два случая без манипулирования строками вручную, но ничто не выскочило у меня сразу в модуле OS.Path.
Это потому, что вы хотите использовать urllib.parse
(для Python 3.x) или urlparse
(для Python 2.x) вместо этого.
У меня нет большого опыта с этим, хотя вот вот фрагмент, использующий str.split()
а также 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)
Другие советы
Вы проверили urlparse. модуль?
Из документов,
from urlparse import urljoin
urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html')
Следует помочь с вашим первым случаем.
Очевидно, вы всегда можете делать базовые строковые манипулирования для отдыха.
Струнные объекты в Python все имеют стандартные и энконетические методы, которые должны быть в состоянии доставить вас туда. Что-то вроде это возможно?
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)