22.2. 标准库满足不了你的需求?

未匹配的标注

尽管Python标准库已经非常丰富了,但也有一个由第三方开发人员提供的、可从  Python 包索引 获得模块的生态系统。本附录描述了其中的一些模块,包括您可能使用它们来补充或甚至替换标准库的情况。

正文

 String  模块包括一个分叉基本的模块工具, 但 Jinja2  和  Mako  是流行的独立代替品。它们都支持循环和条件控制结构,以及用于将数据与模版组合易产生文本输出的其他特性。

Re 模块包括用于使用正式描述的模式(正则表达式)来搜索和解析文本功能。然而这不是解析文本的唯一方式。

 PLY  包支持一 GNU 工具 LXX 合 YACC 的方式构建语法分析器,通常用于构建语言编译器。通过提供描述有效的指令输入、语法和每次遇到时采取的操作,可以构建完全功能的编译和解释器,以及更直接的数据解析器。

PyParsing 是构建解析器的另一种工具。输入是可以是操作符合方法调用链接在一起构建语法的类的实例。

最后, NLTK  是处理自然语言文本的一个软件包——人类语言而不是计算机语言。它支持将句子解析为词类、查找词根形式和基本语义处理。

算法

Functools  模块包括一些用于创建装饰器的工具,这些函数包装其他函数以改变它们的行为。 Wrapt包比 functools.wrap() 包更进一步,以确保装饰器被正确构造并适用于所有边缘情况。

日期和时间

time 和 datetime 提供了用于处理时间和日期的函数与类。 两者均包含用于解析字符串以将其转换为内部表示的函数。 dateutil 包包含了更为灵活的解析器,可以更轻松地构建优雅地处理不同输入格式的健壮应用程序。

datetime 模块包括一个时区感知类,用于表示特定时期的特定时间。 但是,它并没有包含完整的时区数据库。  pytz 包确提供了这样一个数据库。它并不和标准库一起发布,因为是由其它作者开发维护,它会随着时区和夏令时间的改变而频繁更新。

数学

math 模块包含高级数学函数的快速实现。 NumPy 包扩展了支持的函数集,包括线性代数和傅里叶变换函数。它同样内含了改进版的 array - 快速实现的多维数组。

数据持久化与数据交换

本书 sqlite3 章节中的例子直接运行SQL语句,并使用了低级数据结构。然而大型应用程序通常需会使用对象关系映射器( Object Relational Mapper, ORM ) 将类映射到数据库中的表。 sqlalchemy ORM 库提供用于将类与表关联、构建查询以及与不同类型的生产级关系数据库连接的API。

lxml 包封装了 libxml2 和 libxslt 库,为我们提供了除 [xml.etree.ElementTree](pymotw.com/3/ xml.etree.ElementTree/index.html#module-xml.etree.ElementTree "xml.etree.ElementTree:XML Manipulation API") 中的 XML 解析器外的另一个选择。熟悉使用其他语言的开发人员可能会发现在 Python 中使用 lxml 会更容易一些。

defusedxml 包修复了大量XML 实体扩展拒绝服务攻击漏洞(例如 「 Billion Laughs 」),使得使用不受信任的 XML 文件时比单独使用标准库更安全。

密码学

密码学 包的团队表示:「我们的目标是让它成为您的“密码学标准库”。」 密码学包给应用提供了高级 APIs ,容易添加密码学功能特性。该软件包的维护活跃,发布频繁,积极修复诸如 OpenSSL 此类底层库中的漏洞。

用进程、线程、和协程并发

asyncio 内置的事件循环是一个基于模块定义的抽象 API 参考实现。可用诸如 uvloop 这样的库来替换事件循环,这么做可获得更好的性能,但代价是额外的应用依赖。

curio 是另一个类似 asyncio 的并发软件包,它把所有东西都按协程处理,不支持像 asyncio 那样的回调,因此它的 API 更小。

Twisted 库为 Python 编程提供了一个可扩展框架,尤其聚焦于提供基于时间的网络编程和多协议集成。它成熟、稳健、文档齐全。
互联网

requests 是替换 urllib.request 非常流行的选择。为了通过 HTTP 处理可寻址的远程资源,包括健壮的 SSL 支持,它提供了一致的 API ,且在多线程应用中能使用连接轮询以提供更好的性能。它还提供了一些特性,使其非常适合访问 REST API,比如内置的 JSON 解析。

Python html 模块对完整的 HTML 数据提供一个基础的解析器。然而,实际数据很少是完整的。 BeautifulSoup 和 PyQuery 库是 html 之外的替代品,它们面对混乱的数据时,表现得更稳健。它们都提供了解析、修改、创建 HTML 的 API。

内置的 http.server 包提供了一些基础类,帮助创建一个简单的 http 服务。然而除此之外,它对创建web应用程序没有提供太多的支持。 DjangoPyramid 是两个非常流行的web应用框架,他们对高级特性提供更多的支持,比如请求解析、URL 路由、和 cookie 处理。

许多现有的库不能和 asyncio 一起工作,因为它们不能集成到事件循环。作为 aio-libs 项目的一部分,一些像 aiohttp 这样的库为了弥补这一缺陷正在被创建。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/pymotw/outside-...

译文地址:https://learnku.com/docs/pymotw/outside-...

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~