1

基本上我有这个当前的 url 和我想合并到一个新的 url 中的另一个键,但是有三种不同的情况。

假设当前 url 是 localhost:32401/A/B/foo

如果键是 bar 那么我想返回 localhost:32401/A/B/bar

如果键以斜杠开头并且是 /A/bar 那么我想返回 localhost:32401/A/bar

最后,如果 key 是它自己的独立 url,那么我只想返回那个 key = http://foo.com/bar -> http://foo.com/bar

我认为有一种方法可以在不手动操作字符串的情况下至少完成前两种情况,但是在 os.path 模块中没有任何东西立即跳出来。

4

3 回答 3

1

你检查过urlparse模块吗?

从文档中,

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

应该对您的第一个案例有所帮助。

显然,您始终可以对其余部分进行基本的字符串操作。

于 2010-06-09T18:47:43.217 回答
0

Python 中的字符串对象都有 startwith 和 endswith 方法,它们应该能够让你到达那里。大概是这样的?

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)
于 2010-06-09T18:47:19.520 回答
0

我认为有一种方法可以在不手动操作字符串的情况下至少完成前两种情况,但是在 os.path 模块中没有任何东西立即跳出来。

那是因为您想改用urllib.parse(for Python 3.x) 或urlparse(for Python 2.x)。

不过,我对此没有太多经验,所以这里有一个使用str.split()and的片段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)
于 2010-06-09T18:48:25.743 回答