解锁超能力:10 个你一定要尝试的 Python 库
我用 Python 编程时间长了,总结出两件事:
标准库很好用。 但它也缺了一堆东西。 当然,你有 os、pathlib 和 itertools。但有些库会让你忍不住想:“为啥这不是默认自带的?”
我说的不是那些大家都在吹的热门库,比如 tqdm、rich 或 loguru。不是。我要介绍的是那些隐藏的宝藏——让你感觉 Python 一夜之间长出了新手脚的工具。
让我们来加点超能力吧。
1. sh — 像调用函数一样跑 Shell 命令
忘了 subprocess.Popen 的噩梦吧。用 sh,你可以像调用原生 Python 函数一样运行 shell 命令。
import shprint(sh.ls("-l", "/home/user"))print(sh.git("status"))
就这么简单。没有繁琐的样板代码,也不用头疼 stdout=subprocess.PIPE。
我有次用 5 行 sh 代码替换了 80 行 subprocess 的烂摊子,感觉像把垃圾食品从食谱里删了。
小贴士
:结合生成器,你几乎不用费力就能搞定实时日志处理管道。
2. sorcery — 告别样板代码
你有没有经常写些琐碎代码,比如 a, b, c = my_tuple 或者 attrs = vars(obj)?sorcery 让你的代码干净、声明式,读起来像魔法。
from sorcery import dict_of, unpack_keysa, b, c = unpack_keys(dict(a=1, b=2, c=3))d = dict_of(a, b, c) # {'a': 1, 'b': 2, 'c': 3}
如果 Python 有个“开发者体验”部门,这库昨天就该进标准库了。
3. more_itertools — itertools 的超级进化版
想象它是练了一年后从健身房出来的 itertools。
from more_itertools import chunked, windowedprint(list(chunked(range(10), 3))) # [[0,1,2], [3,4,5], [6,7,8], [9]]print(list(windowed(range(5), 2)))# [(0,1), (1,2), (2,3), (3,4)]
我用这个库只花 5 行代码就搞定了面试风格的编程题,感觉有点不公平——就像用水枪大战带了把火箭筒。
4. maya — 让时间处理不再痛苦
如果你跟 datetime 和 pytz 较量过,你就知道那感觉像是戴着烤箱手套做数学。
maya 让时间处理变得人性化。
import mayanow = maya.now()print(now.slang_date()) # 'today'print(now.add(hours=5).iso8601())
还能解析像“下周五下午3点”这样的自然语言?内置支持。 这为啥不是标准库,我永远搞不懂。
5. bidict — 真正的双向字典
你做过多少次这种事?
mapping = {"a": 1, "b": 2}reverse = {v: k for k, v in mapping.items()}
停。用 bidict 吧。
from bidict import bidictb = bidict({"a": 1, "b": 2})print(b.inverse[1]) # 'a'
这个小巧的库救我于数据结构 hack 的水深火热,次数多到我数不清。
6. parsy — 一个不会让你哭的解析器组合库
在 Python 里写解析器通常像嚼玻璃。有了 parsy,优雅得很。
from parsy import string, regexword = regex(r"[a-zA-Z]+")parser = word.sep_by(string(","))print(parser.parse("one,two,three"))# ['one', 'two', 'three']
这库让你感觉像是打开了通往编译器世界的大门。
7. boltons(但不是你想的那部分)
是的,我知道我说不提 boltons。但听我说。很多人没意识到这库有多深。
from boltons.iterutils import bucketizedata = ["apple", "banana", "apricot", "blueberry"]print(bucketize(data, key=lambda x: x[0]))# {'a': ['apple', 'apricot'], 'b': ['banana', 'blueberry']}
就像 Python 集合的瑞士军刀。这里一半的功能都该住进 functools 或 collections 里。
8. tri.struct — 正确的数据类
忘了写 init
的样板代码吧。忘了那些在默认值和继承时卡壳的 dataclasses 吧。
import tri.structclass Person(tri.struct.Struct): name = '' age = 0p = Person(name="Alice", age=30)print(p)
这就是 dataclasses,但用起来真顺手。
9. cytoolz — 速度狂魔的函数式工具
你可能知道 toolz。cytoolz 是它的邪恶双胞胎——用 C 重写,速度飞快。
from cytoolz import curry@currydef add(x, y): return x + yadd5 = add(5)print(add5(10)) # 15
当性能重要时,cytoolz 把纯 Python 甩得远远的。
10. furl — 让 URL 操作不再尖叫
用 urllib.parse 解析 URL 感觉像在杂耍电锯。
furl 让这事变得轻松:
from furl import furlf = furl("https://example.com/page?x=1")f.args['y'] = 2print(f.url) # 'https://example.com/page?x=1&y=2'
第一次用这个库,我把整个自制的 URL 工具模块替换成一行 import,感觉像干了啥犯法的事。
关注公众号,每天更新LLM相关技术
关注公众号,每天更新