22 个常用的 Python 工具包(四)

15. Jmespath

4.73亿次下载

在 Python 中使用 JSON 很容易,因为 JSON 可以完美地映射到 Python 的字典上。我认为这是最好的特性之一。

说实话我从来没听说过 jmepath 这个包,尽管我使用过很多 JSON。我会使用 json.loads() 然后手动从字典中读取数据,或许还得写几个循环。

JMESPath,读作“James path”,能更容易地在 Python 中使用 JSON。你可以用声明的方式定义怎样从 JSON 文档中读取数据。下面是一些最基本的例子: 

import jmespath
# Get a specific element
d = {"foo": {"bar": "baz"}}
print(jmespath.search( foo.bar , d))
# baz
# Using a wildcard to get all names
d = {"foo": {"bar": [{"name": "one"}, {"name": "two"}]}}
print(jmespath.search( foo.bar[*].name , d))
# [“one”, “two”]


这仅仅是它的冰山一角。更多用法参见它的文档和 PyPI 主页。


16. Setuptools

4.01亿次下载

Setuptools 是用来创建 Python 包的工具。

这个项目的文档很糟糕。文档并没有描述它的功能,还包含死链接。真正的好文档在这里:https://packaging.python.org/,以及这篇文章中关于怎样创建 Python 包的教程:https://packaging.python.org/tutorials/packaging-projects/


17. awscli

第3、7、17和22名互相关联,所以请参见第3名的介绍。


18. pytz

3.94亿次下载

类似于第5名的 dateutils,该库可以帮助你操作日期和时间。处理时区很麻烦。幸运的是,这个包可以让时区处理变得很容易。

关于时间,我的经验是:在内部永远使用UTC,只有在需要产生供人阅读的输出时才转换成本地时间。

下面是 pytz 的例子:

from datetime import datetime
from pytz import timezone
amsterdam = timezone( Europe/Amsterdam )
ams_time = amsterdam.localize(datetime(2002, 10, 27, 6, 0, 0))
print(ams_time)
# 2002-10-27 06:00:00+01:00
# It will also know when it s Summer Time
# in Amsterdam (similar to Daylight Savings Time):
ams_time = amsterdam.localize(datetime(2002, 6, 27, 6, 0, 0))
print(ams_time)
# 2002-06-27 06:00:00+02:00


更多文档和例子可以参见 PyPI 页面。


19. Futures

3.89亿次下载

从 Python 3.2 开始,python 开始提供 concurrent.futures 模块,可以帮你执行异步操作。futures 包是该库的反向移植,所以它是用于 Python 2 的。当前的 Python 3 版本不需要该包,因为 Python 3 本身就提供了该功能。

前面我说过,从2020年1月1日起官方已经停止支持 Python 2。我希望明年再做这个列表的时候,不再看到这个包排进前22名。

下面是 futures 包的基本用法:

from concurrent.futures import ThreadPoolExecutor
from time import sleep
def return_after_5_secs(message):
  sleep(5)
  return message
pool = ThreadPoolExecutor(3)
future = pool.submit(return_after_5_secs, 
                     ("Hello world"))
print(future.done())
# False
sleep(5)
print(future.done())
# True
print(future.result())
# Hello World


可见,我们可以创建一个线程池,然后提交一个函数,让某个线程执行。同时,你的程序会继续在主线程上运行。这是实现并行执行的一种很容易的方式。


20. Colorama

3.70亿次下载

你可以使用 Colorama 在终端上添加颜色:

22 个常用的 Python 工具包(四)

下面的示例演示了实现这个功能有多么容易:

from colorama import Fore, Back, Style
print(Fore.RED +  some red text )
print(Back.GREEN +  and with a green background )
print(Style.DIM +  and in dim text )
print(Style.RESET_ALL)
print( back to normal now )



21. Simplejson

3.41亿次下载

Python 自带的 json 模块有什么问题导致了这个包有如此高的排名?没有任何问题!实际上, Python 的 json 就是 simplejson。但 simplejson 有一些优点:

  • 能在更多 Python 版本上运行
  • 更新频率高于 Python
  • 一部分代码是用C编写的,运行得非常快

有时候你会看到脚本中这样写:

try:
  import simplejson as json
except ImportError:
  import json


不过,除非确实需要一些标准库中没有的功能,我依然会使用 json。SImplejson 可能比 json快很多,因为它的一部分是用C实现的。但是除非你要处理几千个 JSON 文件,否则这点速度提升并不明显。此外还可以看看 UltraJSON,这是个几乎完全用C编写的包,应该速度更快。


22. boto3

第3、7、17和22名互相关联,所以请参见第3名的介绍。


结束语

只写22个包很难,因为后面的许多包都是终端用户更倾向使用的包。

写这篇文章给了我一些启示:

  • 许多排名靠前的包提供一些核心的功能,如处理时间、配置文件、加密和标准化等。它们通常是其他项目的依赖。
  • 最常见的使用场景就是连接。许多包提供的功能就是连接到服务器,或者支持其他包连接服务器。
  • 其他包是对 Python 的扩展,比如用于创建 Python 包的工具,创建文档的工具,创建版本兼容性的工具,等等。
上一篇:《你不可不知的关系数据库理论》——1.1 什么是数据库


下一篇:阿里云怎么购买云速成美站: 虚拟主机+建站模板