你是否是那种‘不造轮子不舒服’的开发者——需要什么功能?现成的库?不存在的,自己撸代码!JSON 转 CSV?命令行仪表盘?‘给我 30 分钟,Vim 里徒手搞定!’
而真正的效率不是能写多少代码,而是知道什么时候不该写代码。
就拿最近我最常使用的 Rich 来举例,它只用 3 行代码 就能解决了你过去熬夜调试的终端渲染问题:
- 日志/调试输出 自动变成带语法高亮的可折叠面板(再也不用
print(json.dumps())
瞎眼了) - 表格数据 从歪歪扭扭的
┐└─
符号地狱变成自动对齐+分页的印刷级显示 - 进度条 自带速度预估、动态宽度调整,甚至支持多任务并行——而我曾经花半天时间写出来的版本,连基本的中断恢复都搞不定
Rich 和其他 7 个库(见下文)教会我们一件事:用别人的轮子不是偷懒,而是把时间投资在真正创造价值的地方。
如果你也厌倦了重复解决已被完美解决的问题,是时候升级你的工具箱了。
1. Rich — CLI ≠ 丑陋
还记得以前命令行输出看起来像 Windows 95 那样的样式吗?Rich 可以解决这个问题——而且是样式化的。
只需一次导入,即可让终端输出看起来像在 Figma 中设计的那样。表格、Markdown 渲染、语法高亮的回溯、毫无压力的进度条……简直让人欲罢不能。
推荐阅读:
强推这个 Python 库,把终端玩出花儿了
专属Python开发者的完美终端工具!
from rich.console import Console
console = Console()
console.print(
"Hello, [bold magenta]world[/bold magenta]!")
- 提示:
rich.traceback.install()
用华丽、上下文丰富的回溯替换丑陋的 Python 回溯 - 无需额外工作。
2. Typer — 构建优质 CLI 的最快方法
不再使用argparse
……,我推荐使用 Typer。
Typer 基于 Click 构建,使用函数签名和类型提示构建命令行界面 (CLI) 变得非常简单。只需添加文档字符串,基本上就能编写帮助命令了。
import typer
def main(name: str):
typer.echo(f"Hello {name}")
if __name__ == "__main__":
typer.run(main)
- Typer提示 = 更好的自动完成和文档 = 更少的
--help
time。
3. Pendulum — datetime
会背刺你
有没有试过在 Python 中对两个日期时间进行减法运算,结果却……很奇怪?没错,就是这种感觉。 Pendulum 就是这样一款可直接替代 datetime 的软件,它能像成年人一样处理时区、格式化、持续时间和运算。
推荐阅读:Datetime 最强平台替 python库 -- Pendulum
import pendulum
dt = pendulum.now("UTC").add(days=3)
print(dt.to_datetime_string())
- Pendulum 可以在多种语言环境中解析人类可读的时间字符串,例如“下周四下午 5 点”。
4. Pydantic — 无需繁琐的强类型
我以前都是手动验证 JSON 的。(别评判。)后来我发现了 Pydantic。定义一个带类型提示的类,然后就搞定了——验证、记录、解析。
推荐阅读:墙裂推荐一个 Python 神库--Pydantic
from pydantic import BaseModel
class User(BaseModel):
id: int
name: str
is_active: bool = True
- 注意:它之所以成为 FastAPI 的支柱,是有原因的。但即使在 Web 世界之外?它仍然是一个颠覆性的力量。
5. Faker——真实数据混乱且可能违法
无论你是在模拟 API、播种开发数据库,还是仅仅试图生成令人信服的虚假用户资料(希望不是出于不可告人的原因),Faker 都能满足你的需求。
推荐阅读:推荐七个 Python 效率工具
from faker import Faker
fake = Faker()
print(fake.name(), fake.email(), fake.address())
6. Tqdm — 为不耐烦的人设计的进度条
你可能之前见过这个。但如果你不经常用它,我们得聊聊。
Tqdm 可以包装任何可迭代对象,并显示智能且响应迅速的进度条。非常适合循环、下载或监控大型作业,避免程序静默卡顿。
推荐阅读:Python制作进度条,原来有这么多方法!
from tqdm import tqdm
for i in tqdm(range(10000)):
pass
7. Requests-HTML — 轻松抓取网页
我喜欢requests
。我可以忍受
BeautifulSoup
。但是requests-html
?
它结合了请求的简洁性和无头浏览器的解析能力。它还能执行 JavaScript!这意味着你终于可以安心地抓取现代网页了。
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://example.com')
r.html.render()
print(r.html.find('h1')[0].text)
- 它底层使用了 Pyppeteer。使用 Python 进行 JS 渲染——无需担心 Selenium 带来的困扰。
8. Loguru — 轻松记录日志
Python 默认的日志记录功能……冗长,而且不直观。Loguru 的出现,让日志记录看起来就像在写日记一样——只不过它有日志级别、文件轮换和彩色输出。
推荐阅读:强强联手!Loguru 和 Pydantic 设置 Python 日志
from loguru import logger
logger.add("debug.log", rotation="1 MB")
logger.info("Processing started...")
- 一行代码即可替换低级的
print()
和配置完整的日志系统。