一个自包含、易于重用的库,用于解析、操作、
项目描述
lazr.uri 包包括解析和处理 URI 的代码。
>>> import lazr.uri >>> print('VERSION:', lazr.uri.__version__) VERSION: ...
URI 类
>>> from lazr.uri import URI >>> uri1 = URI('https://127.0.0.1/foo/bar?123') >>> uri2 = URI('https://127.0.0.1/foo/bar/baz') >>> uri1.contains(uri2) True
以下两个是等效的,所以即使“外部”一个比“内部”一个短,答案也应该是 True。
>>> uri1 = URI('https://127.0.0.1/foo/bar/') >>> uri2 = URI('https://127.0.0.1/foo/bar') >>> uri1.contains(uri2) True
以下两个完全相同。我们认为 URL 在其自身内部。
>>> uri1 = URI('https://127.0.0.1/foo/bar/') >>> uri2 = URI('https://127.0.0.1/foo/bar/') >>> uri1.contains(uri2) True
在下一个案例中,url2 的字符串以 url1 的字符串开头。但是,因为 url2 在同一个路径步骤中继续,所以 url2 不在 url1 内部。
>>> uri1 = URI('https://127.0.0.1/foo/ba') >>> uri2 = URI('https://127.0.0.1/foo/bar') >>> uri1.contains(uri2) False
这里,url2 是 url1 加一个额外的路径步骤。所以,url2 在 url1 内部。
>>> uri1 = URI('https://127.0.0.1/foo/bar/') >>> uri2 = URI('https://127.0.0.1/foo/bar/baz') >>> uri1.contains(uri2) True
一旦解析了 URI,其部分就可以访问。
>>> uri = URI('https://fish.tree:8666/blee/blah') >>> uri.scheme 'https' >>> uri.host 'fish.tree' >>> uri.port '8666' >>> uri.authority 'fish.tree:8666' >>> uri.path '/blee/blah'>>> uri = URI('https://127.0.0.1/blee/blah') >>> uri.scheme 'https' >>> uri.host 'localhost' >>> uri.port is None True >>> uri.authority 'localhost' >>> uri.path '/blee/blah'
RFC 3986 的语法不允许在查询组件中使用方括号,但第 3.4 节确实说明了如果在该组件中发现此类分隔符字符应该如何处理。
>>> uri = URI('http://www.apple.com/store?delivery=[slow]#horse+cart') >>> uri.scheme 'http' >>> uri.host 'www.apple.com' >>> uri.port is None True >>> uri.path '/store' >>> uri.query 'delivery=[slow]' >>> uri.fragment 'horse+cart'
在文本中查找 URI
lazr.uri 还知道如何从一大块文本中检索 URI 列表。这适用于查找错误跟踪器 URI 或类似用途。
find_uris_in_text() 函数返回一个迭代器,为文本中找到的每个 URI 生成 URI 对象。请注意,返回的 URI 已由 URI 类进行了规范化
>>> from lazr.uri import find_uris_in_text >>> text = ''' ... A list of URIs: ... * https://127.0.0.1/a/b ... * http://launchpad.net ... * MAILTO:joe@example.com ... * xmpp:fred@example.org ... * http://bazaar.launchpad.net/%7ename12/firefox/foo ... * http://somewhere.in/time?track=[02]#wasted-years ... '''>>> for uri in find_uris_in_text(text): ... print(uri) https://127.0.0.1/a/b http://launchpad.net/ mailto:joe@example.com xmpp:fred@example.org http://bazaar.launchpad.net/~name12/firefox/foo http://somewhere.in/time?track=[02]#wasted-years
lazr.uri 的新闻
1.0.6 (2021-09-13)
调整版本策略以避免导入 pkg_resources,这在大型环境中速度较慢。
1.0.5 (2020-06-29)
为 lazr.uri.URI 添加显式的 __hash__ 方法。
1.0.4 (2020-06-12)
使用 package_data 安装 version.txt (Stefano Rivera,https://bugs.launchpad.net/lazr.uri/+bug/918660).
从 buildout 切换到 tox。
1.0.3 (2012-01-18)
添加与 Python 3 的兼容性 (Thomas Kluyver)。
1.0.1 (2009-06-01)
消除对 setuptools_bzr 的依赖,因此 sdists 不会带来 bzr ini 等。
1.0 (2009-03-23)
在 PyPI 上首次发布
项目详情
关闭
lazr.uri-1.0.6.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 5026853fcbf6f91d5a6b11ea7860a641fe27b36d4172c731f4aa16b900cf8464 |
|
MD5 | 44c032bb0c78a6f249b8ae4b64bd6b4f |
|
BLAKE2b-256 | a6db310eaccd3639f5a8a6011c3133bb1cac7fd80bb46f8a50406df2966302e4 |