21

我正在python-modules、Django、Zope 或 Python 中的任何地方寻找类似java.net.URL的东西。我希望它最好是从语义上的原因,因为有关程序的分析结果表明 URL 在其中起着至关重要的作用。结果是这样的 URL 类在该程序中也将有很大的实际用途。

我当然可以自己写这样的课,但我想在开始重新发明轮子之前先看看周围。

我确实看过urllib2urlparse。基本上具有我需要的urlparse功能,但它没有将其封装到像java.net.URL. 关于我对我的程序的分析,它是颠倒的。

urlparse我还查看了类的源代码SplitResultParseResult. 它们具有一些基本功能,可用于子类化。但是我必须将其余的 urlparse 函数重写为子类方法。

我还发现了 mxURL - Python 的灵活 URL 数据类型。它非常接近我真正想要的。只是对于我的目的来说,这似乎有点过头了。

谁能建议另一种选择?我应该继续重新发明轮子吗?

我的解决方案:

为了获得我的 URL 类,我基本上做了两件事:

  1. 继承自urlparse.ResultMixin
  2. 定义仅调用urlparse.urlparse()并将结果转换为 URL 实例参数的函数。
4

4 回答 4

18

urlparse 确实将 URL 封装到一个名为 的类中ParseResult,因此可以将其视为这些的工厂函数。直接来自 Python 文档:

>>> urlparse('http://www.cwi.nl:80/%7Eguido/Python.html')
ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html',
            params='', query='', fragment='')

如果您迫切希望调用一个类URL来封装您的 URL,请使用别名 ( URL = urlparse.ParseResult) 或创建一个适配器。

于 2011-05-29T21:02:06.133 回答
5

您可能需要考虑查看furl,因为它可能是您需要的答案。

于 2012-08-14T09:22:44.830 回答
3

2018年我们拥有的:

今天只维护了 furl,但它的主要缺点是它是可变的,这当然不鼓励最佳实践。(有很好的现代参考——pathlib它由不可变的类组成。)

总的来说,拥有一种轻松的 OO 方法来解析和构造 URL 是非常棒的。

更新

亚尔值得一看。

于 2018-01-16T18:20:32.177 回答
2

晚了约 10 年,但今天,pydantic提供了几种 URL 类型,它们可能有助于验证、存储和传递 URL;随着类型提示mypy如今越来越流行,有些人可能会认为这是某种标准。

于 2021-09-20T07:32:26.847 回答