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 在终端上添加颜色:
下面的示例演示了实现这个功能有多么容易:
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 包的工具,创建文档的工具,创建版本兼容性的工具,等等。