八個(gè) Python 庫,再也不需要自己編寫腳本了
你是否是那種‘不造輪子不舒服’的開發(fā)者——需要什么功能?現(xiàn)成的庫?不存在的,自己擼代碼!JSON 轉(zhuǎn) CSV?命令行儀表盤?‘給我 30 分鐘,Vim 里徒手搞定!’
而真正的效率不是能寫多少代碼,而是知道什么時(shí)候不該寫代碼。
就拿最近我最常使用的 Rich 來舉例,它只用 3 行代碼 就能解決了你過去熬夜調(diào)試的終端渲染問題:
- 日志/調(diào)試輸出 自動(dòng)變成帶語法高亮的可折疊面板(再也不用 print(json.dumps()) 瞎眼了)
- 表格數(shù)據(jù) 從歪歪扭扭的 ┐└─ 符號地獄變成自動(dòng)對齊+分頁的印刷級顯示
- 進(jìn)度條 自帶速度預(yù)估、動(dòng)態(tài)寬度調(diào)整,甚至支持多任務(wù)并行——而我曾經(jīng)花半天時(shí)間寫出來的版本,連基本的中斷恢復(fù)都搞不定
Rich 和其他 7 個(gè)庫(見下文)教會(huì)我們一件事:用別人的輪子不是偷懶,而是把時(shí)間投資在真正創(chuàng)造價(jià)值的地方。
如果你也厭倦了重復(fù)解決已被完美解決的問題,是時(shí)候升級你的工具箱了。
1. Rich — CLI ≠ 丑陋
還記得以前命令行輸出看起來像 Windows 95 那樣的樣式嗎?Rich 可以解決這個(gè)問題——而且是樣式化的。
只需一次導(dǎo)入,即可讓終端輸出看起來像在 Figma 中設(shè)計(jì)的那樣。表格、Markdown 渲染、語法高亮的回溯、毫無壓力的進(jìn)度條……簡直讓人欲罷不能。
from rich.console import Console
console = Console()
console.print("Hello, [bold magenta]world[/bold magenta]!")
- 用途:不會(huì)讓你眼花繚亂的日志。??
- 提示:rich.traceback.install()用華麗、上下文豐富的回溯替換丑陋的 Python 回溯 - 無需額外工作。
2. Typer — 構(gòu)建優(yōu)質(zhì) CLI 的最快方法
不再使用argparse……,我推薦使用 Typer。
Typer 基于 Click 構(gòu)建,使用函數(shù)簽名和類型提示構(gòu)建命令行界面 (CLI) 變得非常簡單。只需添加文檔字符串,基本上就能編寫幫助命令了。
import typer
def main(name: str):
typer.echo(f"Hello {name}")
if __name__ == "__main__":
typer.run(main)
- 用途:在 5 分鐘內(nèi)創(chuàng)建完善的 CLI 工具。
- Typer提示 = 更好的自動(dòng)完成和文檔 = 更少的--help time。
3. Pendulum — datetime會(huì)背刺你
有沒有試過在 Python 中對兩個(gè)日期時(shí)間進(jìn)行減法運(yùn)算,結(jié)果卻……很奇怪?沒錯(cuò),就是這種感覺。 Pendulum 就是這樣一款可直接替代 datetime 的軟件,它能像成年人一樣處理時(shí)區(qū)、格式化、持續(xù)時(shí)間和運(yùn)算。
import pendulum
dt = pendulum.now("UTC").add(days=3)
print(dt.to_datetime_string())
- 用途:調(diào)度腳本、操控時(shí)區(qū)或應(yīng)對夏令時(shí)。
- Pendulum 可以在多種語言環(huán)境中解析人類可讀的時(shí)間字符串,例如“下周四下午 5 點(diǎn)”。
4. Pydantic — 無需繁瑣的強(qiáng)類型
我以前都是手動(dòng)驗(yàn)證 JSON 的。(別評判。)后來我發(fā)現(xiàn)了 Pydantic。定義一個(gè)帶類型提示的類,然后就搞定了——驗(yàn)證、記錄、解析。
推薦閱讀:墻裂推薦一個(gè) Python 神庫--Pydantic
from pydantic import BaseModel
class User(BaseModel):
id: int
name: str
is_active: bool = True
- 用途:驗(yàn)證 API 響應(yīng)、配置和輸入數(shù)據(jù)。
- 注意:它之所以成為 FastAPI 的支柱,是有原因的。但即使在 Web 世界之外?它仍然是一個(gè)顛覆性的力量。
5. Faker——真實(shí)數(shù)據(jù)混亂且可能違法
無論你是在模擬 API、播種開發(fā)數(shù)據(jù)庫,還是僅僅試圖生成令人信服的虛假用戶資料(希望不是出于不可告人的原因),F(xiàn)aker 都能滿足你的需求。
推薦閱讀:推薦七個(gè) Python 效率工具
from faker import Faker
fake = Faker()
print(fake.name(), fake.email(), fake.address())
- 用途:創(chuàng)建個(gè)性化的虛擬數(shù)據(jù)。??
- 試試生成海盜名字。相信我。
6. Tqdm — 為不耐煩的人設(shè)計(jì)的進(jìn)度條
你可能之前見過這個(gè)。但如果你不經(jīng)常用它,我們得聊聊。
Tqdm 可以包裝任何可迭代對象,并顯示智能且響應(yīng)迅速的進(jìn)度條。非常適合循環(huán)、下載或監(jiān)控大型作業(yè),避免程序靜默卡頓。
推薦閱讀:Python制作進(jìn)度條,原來有這么多方法!
from tqdm import tqdm
for i in tqdm(range(10000)):
pass
- 用于:所有耗時(shí)超過 0.5 秒的事情。
- 提示:幫助你盡早捕獲無限循環(huán)。
7. Requests-HTML — 輕松抓取網(wǎng)頁
我喜歡requests。我可以忍受BeautifulSoup。但是requests-html?
它結(jié)合了請求的簡潔性和無頭瀏覽器的解析能力。它還能執(zhí)行 JavaScript!這意味著你終于可以安心地抓取現(xiàn)代網(wǎng)頁了。
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://example.com')
r.html.render()
print(r.html.find('h1')[0].text)
- 用途:抓取討厭傳統(tǒng)解析器的網(wǎng)站。
- 它底層使用了 Pyppeteer。使用 Python 進(jìn)行 JS 渲染——無需擔(dān)心 Selenium 帶來的困擾。
8. Loguru — 輕松記錄日志
Python 默認(rèn)的日志記錄功能……冗長,而且不直觀。Loguru 的出現(xiàn),讓日志記錄看起來就像在寫日記一樣——只不過它有日志級別、文件輪換和彩色輸出。
推薦閱讀:強(qiáng)強(qiáng)聯(lián)手!Loguru 和 Pydantic 設(shè)置 Python 日志
from loguru import logger
logger.add("debug.log", rotation="1 MB")
logger.info("Processing started...")
- 用途:調(diào)試、生產(chǎn)日志和更好的睡眠。
- 一行代碼即可替換低級的print() 和配置完整的日志系統(tǒng)。