Python 在一个字符串上应用多个规则的最佳实践
我将url作为字符串获取,需要对其应用几个规则。第一条规则是删除锚点,然后删除“../”符号,因为urljoin在某些情况下连接url不正确,最后删除前导斜杠。现在我有这样的代码:Python 在一个字符串上应用多个规则的最佳实践,python,Python,我将url作为字符串获取,需要对其应用几个规则。第一条规则是删除锚点,然后删除“../”符号,因为urljoin在某些情况下连接url不正确,最后删除前导斜杠。现在我有这样的代码: def construct_url(parent_url, child_url): url = urljoin(parent_url, child_url) url = url.split('#')[0] url = url.replace('../', '')
def construct_url(parent_url, child_url):
url = urljoin(parent_url, child_url)
url = url.split('#')[0]
url = url.replace('../', '')
url = url.rstrip('/')
return url
但我认为这不是最好的做法。我认为可以做得简单得多。你能帮我吗?谢谢。不幸的是,这里没有什么能让函数更简单,因为您正在处理一些非常奇怪的情况 但是,您可以使用Python将URL拆分为定义良好的组件,进行处理,然后使用以下方法将其重新组合在一起,从而使其更加健壮: 输出:
http://user:pw@google.com/chrome
使用urlparse
中的工具有一个优点,即您确切地知道处理操作的内容(在您的案例中是路径和片段),并且它可以为您处理所有事情,如用户凭据、查询字符串、参数等
注意:与我在评论中的建议相反,
urljoin
实际上规范了URL:
>>> from urlparse import urljoin
>>> urljoin('http://google.com/foo/bar', '../qux')
'http://google.com/qux'
但它严格遵循RFC1808
发件人:
在具有定义良好的基本URL的对象中
基础:
[……]
解析器必须小心处理存在更多错误的情况
相对路径。段比
基本URL的路径。请注意,。“
语法不能用于更改
URL的
../../../g = <URL:http://a/../g>
../../../../g = <URL:http://a/../../g>
。/../../g=
../../../g=
因此,
urljoin
通过保留那些无关的。/
,做了正确的事情,因此您需要通过手动处理来删除它们。不要尝试使用正则表达式(用于此任务)@Anmol_uppal no.只是不。使用urlparse.urlparse
比自己使用正则表达式实现URL方案解析器更不容易出错。你不认为,如果我使用正则表达式,可读性会降低?@parikLS你能举例说明你的父url
和子url
是什么样子吗?你所说的删除“../”符号是什么意思,因为urljoin在某些情况下连接url是不正确的?请你也举个例子好吗?@LukasGraf当然。父url=''子url='../../../chrome'urljoin的结果将是“非常感谢,这非常有帮助
../../../g = <URL:http://a/../g>
../../../../g = <URL:http://a/../../g>