Управление путями к каталогам в Python - PullRequest
1 голос
/ 09 июня 2010

В основном у меня есть этот текущий URL и этот другой ключ, который я хочу объединить в новый URL, но есть три разных случая.

Предположим, текущим URL является localhost: 32401 / A / B / foo

если ключ является баром, то я хочу вернуть localhost: 32401 / A / B / bar

если ключ начинается с косой черты и / A / bar, тогда я хочу вернуть localhost: 32401 / A / bar

наконец, если ключ является его собственным независимым URL, тогда я просто хочу вернуть этот ключ = http://foo.com/bar -> http://foo.com/bar

Я предполагаю, что есть способ выполнить хотя бы первые два случая, не манипулируя строками вручную, но в модуле os.path у меня ничего не выпало сразу.

Ответы [ 3 ]

1 голос
/ 09 июня 2010

Проверяли ли вы модуль urlparse ?

Из документов

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

Должно помочь в вашем первом случае., вы всегда можете сделать основные манипуляции со строками для остальных.

0 голосов
/ 09 июня 2010

Я предполагаю, что есть способ выполнить хотя бы первые два случая, не манипулируя строками вручную, но в модуле 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)
0 голосов
/ 09 июня 2010

Строковые объекты в 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)
...