gpt4 book ai didi

python - 如何构造相对 url,在 Python 中给定两个绝对 url

转载 作者:太空狗 更新时间:2023-10-29 17:30:55 24 4
gpt4 key购买 nike

是否有一个内置函数来获取这样的 url:../images.html 给出这样的基本 url:http://www.example.com/faq/index .html 和目标 url,例如 http://www.example.com/images.html

我检查了 urlparse 模块。我想要的是 urljoin() 函数的对应部分。

最佳答案

你可以使用 urlparse.urlparse查找路径,以及 os.path.relname 的 posixpath 版本找到相对路径。

(警告:这适用于 Linux,但可能不适用于 Windows):

import urlparse
import sys
import posixpath

def relurl(target,base):
base=urlparse.urlparse(base)
target=urlparse.urlparse(target)
if base.netloc != target.netloc:
raise ValueError('target and base netlocs do not match')
base_dir='.'+posixpath.dirname(base.path)
target='.'+target.path
return posixpath.relpath(target,start=base_dir)

tests=[
('http://www.example.com/images.html','http://www.example.com/faq/index.html','../images.html'),
('http://google.com','http://google.com','.'),
('http://google.com','http://google.com/','.'),
('http://google.com/','http://google.com','.'),
('http://google.com/','http://google.com/','.'),
('http://google.com/index.html','http://google.com/','index.html'),
('http://google.com/index.html','http://google.com/index.html','index.html'),
]

for target,base,answer in tests:
try:
result=relurl(target,base)
except ValueError as err:
print('{t!r},{b!r} --> {e}'.format(t=target,b=base,e=err))
else:
if result==answer:
print('{t!r},{b!r} --> PASS'.format(t=target,b=base))
else:
print('{t!r},{b!r} --> {r!r} != {a!r}'.format(
t=target,b=base,r=result,a=answer))

关于python - 如何构造相对 url,在 Python 中给定两个绝对 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7469573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com