在Python中操作目录路径
基本上,我现在有一个网址和一个想要合并的新关键字,但有三种不同的情况。
假设当前的网址是 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)