Вопрос

По сути, у меня есть этот текущий 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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top