在Python中操作目录路径

时间:2010-06-09 18:32:59

标签: python directory relative-path absolute-path

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

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

如果key为bar,那么我想返回localhost:32401 / A / B / bar

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

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

我假设有一种方法可以在不操作字符串的情况下至少执行前两种情况,但是在os.path模块中没有立即跳出来。

3 个答案:

答案 0 :(得分:1)

您是否签出了urlparse模块?

来自文档,

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

应该对你的第一个案件有帮助。

显然,你总是可以为其余部分进行基本的字符串操作。

答案 1 :(得分:0)

Python中的String对象都有startswith和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)

答案 2 :(得分:0)

  

我假设有一种方法可以在不操作字符串的情况下至少执行前两种情况,但是在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)