该模块提供了一个方便的URL类,用于URL解析和修改。
URL由str构造:
>>> from yarl import URL
>>> url = URL('https://www.python.org/~guido?arg=1#frag')
>>> url
URL('https://www.python.org/~guido?arg=1#frag')所有的URL部分:scheme, user, password, host, port, path, query 和 fragment 都可以通过属性访问:
>>> url.scheme
'https'
>>> url.host
'www.python.org'
>>> url.path
'/~guido'
>>> url.query_string
'arg=1'
>>> url.query
<MultiDictProxy('arg': '1')>
>>> url.fragment
'frag'所有URL修改操作都会生成一个新的URL对象:
>>> url = URL('https://www.python.org')
>>> url / 'foo' / 'bar'
URL('https://www.python.org/foo/bar')
>>> url / 'foo' % {'bar': 'baz'}
URL('https://www.python.org/foo?bar=baz')传递给构造函数和修改方法的字符串会被自动编码,从而得到规范化的表示:
>>> url = URL('https://www.python.org/шлях')
>>> url
URL('https://www.python.org/%D1%88%D0%BB%D1%8F%D1%85')常规属性是百分比解码的,使用raw_版本来获取编码的字符串:
>>> url.path
'/шлях'
>>> url.raw_path
'/%D1%88%D0%BB%D1%8F%D1%85'URL的可读表示可以通过.human_repr()获得:
>>> url.human_repr()
'https://www.python.org/шлях'完整的文档请参阅https://yarl.aio-libs.org。
$ pip install yarl
该库仅支持Python 3!
PyPI 提供了 Linux、Windows 和 MacOS 的二进制 wheel 包。如果您想在
没有提供 wheel 包的其他操作系统上安装yarl,将使用 tarball 从
源代码编译该库。这需要C编译器和Python头文件。
要跳过编译,您必须通过使用 PEP 517
配置设置pure-python,或将YARL_NO_EXTENSIONS
环境变量设置为非空值(例如):
$ pip install yarl --config-settings=pure-python=false请注意,纯Python(未编译)版本速度要慢得多。然而, PyPy 总是使用纯Python实现,因此不受此变量的影响。
YARL 需要 multidict 和 propcache 库。
文档位于 https://yarl.aio-libs.org。
对于布尔值的表示,没有标准。
有些系统偏好 true/false,有些喜欢 yes/no, on/off,
Y/N, 1/0 等。
yarl 无法在如何序列化 bool 值上做出明确的决定,因为
这取决于最终用户的应用程序如何构建,并且对于
不同的应用程序会有所不同。该库不在API中接受布尔值;用户应该使用
自己偏好的转换协议将 bool 转换为字符串。
furl (https://pypi.python.org/pypi/furl)
该库功能丰富,但
furl对象是可变的。我不敢将此对象传递给外部代码:谁知道代码是否会在我只是想发送具有 便捷访问URL属性的帮助器的URL时,以一种可怕的方式修改我的URL。
furl还有其他不显眼的棘手问题,但主要反对意见 是可变性。URLObject (https://pypi.python.org/pypi/URLObject)
URLObject是不可变的,这非常好。
每次URL更改都会生成一个新的URL对象。
但该库不执行任何解码/编码转换,让 最终用户自己处理这些繁琐的细节。
该项目托管在GitHub
如果您发现了错误或有任何建议以改进该库,请在bug跟踪器上提交问题。
aio-libs google group: https://groups.google.com/forum/#!forum/aio-libs
欢迎在此发布您的问题和想法。
该yarl包由Andrew Svetlov编写。
它是Apache 2许可,并且免费可用。