隐藏的宝藏,13个不可忽视的优秀 Python 库

浏览: 1888

作为一门语言,你知道 Python 是如何获得现在的成功的吗? 不妨去看看它大量的库吧,不管是原生的,还是第三方的,可能会有所收获。

有这么多的库,也就不奇怪为什么有的很多人用,有的却没有引起多少人注意。 而且,专注于一个领域的程序员往往并不知道那些看起来是为其他工作类型创建的库能给他们带来什么好处。

这里有 13个你可能已经忽略,但绝对值得你的注意的优秀的 Python 库。 是时候给这些隐藏的宝藏一些关注了。

1Pillow

简介:图像“无痛”处理库,易用版的 PIL。

亮点:大多数执行过图像处理的 Pythonist 应该会熟悉 PIL(Python 图像库),但 PIL 有不少缺点和限制,并且很少更新。Pillow 的目标是比 PIL 更容易使用,并通过最小的变化与 PIL 代码兼容。 扩展包括用于与本机 Windows 的映像功能和 Python Tcl/Tk-backed Tkinter GUI 包。

Pillow 在2017年初发布了 4.0 版本,增加了许多变化,主要是针对内部结构,但同时也更新了 Pillow 使用 的 FreeType 和 OpenJpeg 等最新版本的依赖库。

image.png

2、Gooey

简介: 一条命令,将命令行程序变成一个 GUI 程序。

亮点:使用命令行程序来呈现用户,尤其是 rank-and-file 用户是减少其使用的最快方法之一。 Gooey 论证了 argparse 命令行解析库期望的参数,并把它们作为 GUI 形式呈现给用户,所有选项都使用适当的控件(例如多选项参数的下拉列表等)进行标记和显示。 假设你已经在使用 argparse,只需要很少的附加编码 - 一个单独的 include 和一个单独的 decorator ,就能使其工作。

image.png

3、Peewee

简介:一个轻量级的 ORM,支持 SQLite、MySQL 和 PostgreSQL,提供多种扩展。

亮点:ORMs 目前并没有什么很大的声誉,有些人宁愿把图式模型放在数据库端做。 但一个结构良好的 ORM 对于不想去触碰数据库的开发人员来说,是一个十分不错的选择。Peewee 模型易于构建、连接和操作,并且内置了许多常见的查询操作函数(如分页)。还有丰富的功能可作为加载项,包括其他数据库的扩展、测试工具 - 甚至 ORM haters 可能会很爱的一个功能 - 模式迁移系统。

4、Scrapy

简介:一个快速、高级的屏幕抓取及 web 爬虫框架。

亮点:Scrapy 保持整个爬取过程简单。 创建一个类,并定义你要删除的项目的类型,并编写一些关于如何从页面中提取数据的规则。结果将以 JSON、XML、CSV 或许多其他的格式导出。收集的数据可以保存为 raw,也可以在导入时进行清理。 此外,Scrapy 可以扩展允许许多其他行为,例如网站登录处理、会话 cookie 处理。 图像也可以被 Scrapy 自动提取并与被抓取的内容相关联。

image.png

5、Apache Libcloud

简介:一个为各种云设计的 Python 库,通过单一、一致和统一的 API 访问各个云提供商。

亮点:如果上面关于 Apache Libcloud 的描述没有让你有摩拳擦掌想去体验的冲动,没关系。 云提供商都喜欢以他们自己的方式做事情 - 有时巧妙,有时不是 - 所以有一个统一的机制来处理几十个提供商和相关的方法来操纵他们的资源是一个福音。 API 可用于计算、存储、负载平衡和 DNS,支持 2.x 和 3.x 的 Python 风格。 对于那些为了额外的性能使用 Python 的 PyPy 版本的,也能被很好地支持。

6、Pygame

简介:一个高可移植性的游戏开发模块。

亮点:如果你认为除了身处游戏开发世界的,其他人不会想要这样的框架,那还请再重新思考一下。 Pygame 提供了一个方便的选项来处理许多面向 GUI 的行为:绘制画布和 sprite 图形、处理多声道声音、处理窗口和点击事件、 碰撞检测等等。 不是每个应用,或者可以说不是每个 GUI 应用,在使用 Pygame 构建时都能受益,但仔细看看它提供了什么,你可能会感到惊讶。

image.png

7、NumPy

简介:科学计算和数学工作基础包,包括统计学、线性代数、矩阵数学、金融操作等等。

亮点:Quant 和 bean 计数器已经了解 NumPy 并且喜欢它,但 NumPy 的数学 'n' 统计的应用范围比你想象的更广。 例如,它是向多维数组添加对 Python 支持的最简单、最灵活的方法之一。 NumPy 提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库,专为进行严格的数字处理而产生,和稀疏矩阵运算包Scipy 配合使用更加方便。

8、Sh

简介:一个完备的 subprocess 替代库,能调用 subprocess 中的任意外部程序,并将结果返回到 Python 应用。

亮点:在任何兼容 Posix 的系统上,Sh 都是一个神器。 这意味着在这些平台上可用的所有命令行程序都可以使用 Python。 你不仅不再需要重新造轮子,还不用再为如何优雅地添加该功能到你的应用上而努力。 值得注意的是:该库对于通过此库传递的参数没有清理界限,请确保不要将原始用户输入传递。

9、Python-docx

简介:以编程方式创建和操纵 Microsoft Word .docx 文件。

亮点:理论上,编写用于创建和操纵 XML-style Microsoft Word 文档的脚本应该很容易。 但在实践中,由于 .docx 格式的内部复杂性,其实还真没那么简单。 Python-docx 允许通过提供一种高级的、编程的方式来创建 .docx 文件,从而完成所有的相关操作。

文本、图像、样式和文档都可以通过库的 API 添加和更改。 该库还允许更改现有文档。不过某些功能仍然不受支持, 例如不能添加或更改标题和脚注 - 但 Python-docx 尽最大努力保留了这些东西,即便它们还不能被操纵。

image.png

10、PyFilesystem

简介:一个为所有文件系统提供的通用 Pythonic 接口。

亮点: PyFilesystem 背后的基本理念非常简单:“以同样的方式抽象整个文件系统”。它是文件系统的抽象层。实际上,任何包含文件和目录的东西(硬盘、压缩文件、FTP服务器等等)都可以封装成一个共同的接口,甚至彼此叠加组合。使用这个模块,你可以不需要知道文件确切的物理位置。

除了使编写用于操作文件的跨平台代码变得更容易外,PyFilesystem 还省去了将来自标准库(主要是 os 和 io)的不同部分的东西拼凑在一起的步骤。 

image.png

11、EbookLib

简介:一个用于处理 EPUB2 / EPUB3 和 Kindle 格式图书的电子书库。

亮点:创建电子书通常需要使用各种命令行或其它工具, EbookLib 提供了管理工具和 API 来简化该过程。 它适用于 EPUB2 和 EPUB3 文件,与 Kindle 的支持正在开发中。

提供图像和文本(后者以HTML格式)后,你可以将这些片段组装成一个电子书,包括章节、嵌套目录条目、图像、HTML标记等。 还支持封面、书脊和样式表数据。 插件系统允许第三方扩展。

如果你不需要像 EbookLib 这样样的东西,可以看看 Mkepub,它提供基本的电子书装配功能,整个库只有几千字节,但也包含添加图像到文档的功能。 Mkepub 的一个小缺点是它需要 Jinja2,而后者又需要  MarkupSafe 库。

12、Cython

简介:Python 的 C 语言扩展工具,使用类型混合使 Python 编译成 C 模块来获得性能的提升。

亮点:Python 有很好的便利性,但这种方便是以性能为代价的。 C 是运行时性能的黄金标准(限制程序集),但可能难以处理。 Cython 对着二者进行挖掘 - 不仅提供一个 Python 访问 C 库的方便选项,还允许 Python 代码转换为高性能 C 代码。 它在科学计算中广泛使用,但它也可以用于各种应用的加速。

这个转换过程中的最好的部分是你不必一次做所有事情。 可以先从 Python 代码开始,使用 Cython 编译它,以获得适度的性能提升。 为了进一步加速,再可以使用类型注释来装饰变量和函数,这个过程不会比使用 Python 的 PEP 484 类型提示系统更复杂(尽管 Cython 的语法不同)。

13、Behold

简介:一款强大的支持 print-style 的调试工具。

亮点:对于大多数语言来说,有一个很简单的调试方法:插入 in-line "print" 语句。 Python 也不例外,即使是在大型项目,也有不少人这么做。 但简单的 print-debugging,很难在大型、多模块的项目中获得有用的结果。

Behold 提供了一个用于通过 print 语句进行上下文调试的工具包。 它允许对输出施加统一的外观,对结果进行标记,以便可以通过搜索或过滤器对其进行排序。并且跨模块提供上下文,以便可以在另一个模块中正确调试来自某个模块的函数。Behold 可以处理许多常见的 Python 特定场景,如 printing 对象的内部字典、揭露嵌套的属性、存储和重用结果、在调试过程中的其他点进行比较等等。

image.png

原文Hidden gems: Python libraries too good to overlook

责任编辑开源中国 - 王练

推荐 3
本文由 Jmarry 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册