什么是pythonic方法解析这样的URI'foo:// user:pass @ host:port'到适当的变量?

gyl*_*lns 2 python

只有host部分不是可选的,也就是说URI可能具有以下形式:

 1. foo://user:pass@host:port
 2. foo://host:port
 3. user@host
 4. host
Run Code Online (Sandbox Code Playgroud)

等等.如果我们有五个变量来保存这样一个URI中的部分值,那么当它们存在于URI中时,是否有一种pythonic方法将这些值分配给适当的变量?

Mar*_*ers 6

你会使用urlparse(python 2)/ urllib.parsemodule.

urlparse()函数可以处理您提到的所有表单,但请注意,如果没有方案,则将user@hosthost部分视为路径:

>>> from urllib.parse import urlparse
>>> urlparse('foo://user:pass@host:port')
ParseResult(scheme='foo', netloc='user:pass@host:port', path='', params='', query='', fragment='')
>>> urlparse('foo://host:port')
ParseResult(scheme='foo', netloc='host:port', path='', params='', query='', fragment='')
>>> urlparse('user@host')
ParseResult(scheme='', netloc='', path='user@host', params='', query='', fragment='')
>>> urlparse('host')
ParseResult(scheme='', netloc='', path='host', params='', query='', fragment='')
Run Code Online (Sandbox Code Playgroud)

这很容易解决:

host = result.hostname or result.path.rpartition('@')[-1]
Run Code Online (Sandbox Code Playgroud)