在Python中操作目录路径

1 投票
3 回答
653 浏览
提问于 2025-04-15 23:45

基本上,我现在有一个网址和一个想要合并的新关键字,但有三种不同的情况。

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

如果关键字是 bar,那我想返回 localhost:32401/A/B/bar。

如果关键字是以斜杠开头的,比如 /A/bar,那我想返回 localhost:32401/A/bar。

最后,如果关键字是一个独立的网址,比如 http://foo.com/bar,那我就直接返回这个网址 = http://foo.com/bar -> http://foo.com/bar

我想应该有办法做到前两种情况,而不需要手动处理字符串,但在 os.path 模块中我没有立即找到相关的方法。

3 个回答

0

在Python中,字符串对象都有一些方法,比如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)
1

你有没有看看这个urlparse模块?

根据文档的介绍,

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

这个模块应该能帮你解决第一个问题。

显然,对于其他情况,你也可以直接进行基本的字符串处理。

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)

撰写回答