Veloris.
返回索引
其他 2026-02-14

Python常用第三方库速查:requests、click、rich……这些库让你少写80%代码

2 分钟
606 words

Python常用第三方库速查:requests、click、rich……这些库让你少写80%代码

Python拥有丰富的第三方库生态系统,可以大大提高开发效率。本篇介绍各领域常用的第三方库,帮助你快速找到合适的工具。


1. 数据处理

NumPy - 数值计算

pip install numpy
import numpy as np

# 数组操作
arr = np.array([1, 2, 3, 4, 5])
print(arr.mean())  # 平均值
print(arr.std())   # 标准差

# 矩阵运算
matrix = np.array([[1, 2], [3, 4]])
print(np.dot(matrix, matrix))  # 矩阵乘法

Pandas - 数据分析

pip install pandas
import pandas as pd

# 读取数据
df = pd.read_csv('data.csv')
df = pd.read_excel('data.xlsx')

# 数据操作
df.head()           # 前5行
df.describe()       # 统计摘要
df['column'].mean() # 列平均值
df.groupby('category').sum()  # 分组聚合

# 数据清洗
df.dropna()         # 删除空值
df.fillna(0)        # 填充空值
df.drop_duplicates() # 删除重复

Matplotlib - 数据可视化

pip install matplotlib
import matplotlib.pyplot as plt

# 折线图
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.xlabel('X')
plt.ylabel('Y')
plt.title('示例图')
plt.show()

# 柱状图
plt.bar(['A', 'B', 'C'], [10, 20, 15])
plt.show()

2. 网络请求

Requests - HTTP请求

pip install requests
import requests

# GET请求
response = requests.get('https://api.example.com/data')
print(response.status_code)
print(response.json())

# POST请求
data = {'key': 'value'}
response = requests.post('https://api.example.com/submit', json=data)

# 带参数
params = {'page': 1, 'limit': 10}
response = requests.get('https://api.example.com/list', params=params)

# 带请求头
headers = {'Authorization': 'Bearer token123'}
response = requests.get('https://api.example.com/protected', headers=headers)

# 超时设置
response = requests.get('https://api.example.com', timeout=5)

# 会话保持
session = requests.Session()
session.headers.update({'User-Agent': 'MyApp/1.0'})
response = session.get('https://api.example.com')

httpx - 异步HTTP

pip install httpx
import httpx
import asyncio

# 同步使用
response = httpx.get('https://api.example.com')

# 异步使用
async def fetch_data():
    async with httpx.AsyncClient() as client:
        response = await client.get('https://api.example.com')
        return response.json()

# asyncio.run(fetch_data())

3. 文件处理

openpyxl - Excel操作

pip install openpyxl
from openpyxl import Workbook, load_workbook

# 创建Excel
wb = Workbook()
ws = wb.active
ws['A1'] = 'Hello'
ws.append([1, 2, 3])
wb.save('output.xlsx')

# 读取Excel
wb = load_workbook('data.xlsx')
ws = wb.active
for row in ws.iter_rows(values_only=True):
    print(row)

python-docx - Word操作

pip install python-docx
from docx import Document

# 创建Word
doc = Document()
doc.add_heading('标题', 0)
doc.add_paragraph('正文内容')
doc.save('output.docx')

# 读取Word
doc = Document('input.docx')
for para in doc.paragraphs:
    print(para.text)

PyPDF2 - PDF操作

pip install PyPDF2
from PyPDF2 import PdfReader, PdfWriter

# 读取PDF
reader = PdfReader('input.pdf')
for page in reader.pages:
    print(page.extract_text())

# 合并PDF
writer = PdfWriter()
for pdf_file in ['file1.pdf', 'file2.pdf']:
    reader = PdfReader(pdf_file)
    for page in reader.pages:
        writer.add_page(page)
writer.write('merged.pdf')

Pillow - 图像处理

pip install Pillow
from PIL import Image

# 打开图片
img = Image.open('image.jpg')

# 调整大小
img_resized = img.resize((800, 600))

# 裁剪
img_cropped = img.crop((100, 100, 400, 400))

# 旋转
img_rotated = img.rotate(90)

# 保存
img_resized.save('output.jpg', quality=85)

# 格式转换
img.save('output.png')

4. 数据库

SQLite(内置)

import sqlite3

# 连接数据库
conn = sqlite3.connect('database.db')
cursor = conn.cursor()

# 创建表
cursor.execute('''
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY,
        name TEXT,
        age INTEGER
    )
''')

# 插入数据
cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('张三', 25))
conn.commit()

# 查询数据
cursor.execute('SELECT * FROM users')
rows = cursor.fetchall()
for row in rows:
    print(row)

conn.close()

SQLAlchemy - ORM

pip install sqlalchemy
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import declarative_base, sessionmaker

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

# 创建引擎
engine = create_engine('sqlite:///database.db')
Base.metadata.create_all(engine)

# 创建会话
Session = sessionmaker(bind=engine)
session = Session()

# 添加数据
user = User(name='张三', age=25)
session.add(user)
session.commit()

# 查询数据
users = session.query(User).filter(User.age > 20).all()
for user in users:
    print(user.name, user.age)

5. 命令行工具

argparse(内置)

import argparse

parser = argparse.ArgumentParser(description='示例程序')
parser.add_argument('input', help='输入文件')
parser.add_argument('-o', '--output', default='output.txt', help='输出文件')
parser.add_argument('-v', '--verbose', action='store_true', help='详细输出')
parser.add_argument('-n', '--number', type=int, default=10, help='数量')

args = parser.parse_args()
print(f"输入: {args.input}")
print(f"输出: {args.output}")

Click - 命令行框架

pip install click
import click

@click.command()
@click.argument('name')
@click.option('--count', default=1, help='重复次数')
@click.option('--shout/--no-shout', default=False)
def hello(name, count, shout):
    """简单的问候程序"""
    for _ in range(count):
        message = f'Hello, {name}!'
        if shout:
            message = message.upper()
        click.echo(message)

if __name__ == '__main__':
    hello()

Rich - 美化输出

pip install rich
from rich.console import Console
from rich.table import Table
from rich.progress import track
import time

console = Console()

# 彩色输出
console.print("Hello", style="bold red")
console.print("[green]成功[/green] 操作完成")

# 表格
table = Table(title="用户列表")
table.add_column("ID", style="cyan")
table.add_column("姓名", style="magenta")
table.add_column("年龄", style="green")
table.add_row("1", "张三", "25")
table.add_row("2", "李四", "30")
console.print(table)

# 进度条
for _ in track(range(100), description="处理中..."):
    time.sleep(0.01)

tqdm - 进度条

pip install tqdm
from tqdm import tqdm
import time

# 基本使用
for i in tqdm(range(100)):
    time.sleep(0.01)

# 自定义描述
for i in tqdm(range(100), desc="下载中"):
    time.sleep(0.01)

# 手动更新
with tqdm(total=100) as pbar:
    for i in range(10):
        time.sleep(0.1)
        pbar.update(10)

6. 日期时间

arrow - 日期时间处理

pip install arrow
import arrow

# 当前时间
now = arrow.now()
print(now)

# 时区转换
utc = arrow.utcnow()
local = utc.to('Asia/Shanghai')

# 格式化
print(now.format('YYYY-MM-DD HH:mm:ss'))

# 人性化显示
print(now.humanize(locale='zh'))  # "刚刚"

# 时间计算
tomorrow = now.shift(days=1)
last_week = now.shift(weeks=-1)

# 解析
dt = arrow.get('2024-01-15', 'YYYY-MM-DD')

pendulum - 日期时间

pip install pendulum
import pendulum

# 当前时间
now = pendulum.now()
now_utc = pendulum.now('UTC')

# 创建日期
dt = pendulum.datetime(2024, 1, 15, 12, 30)

# 时间差
diff = now.diff(dt)
print(diff.in_days())
print(diff.in_hours())

# 人性化
print(now.diff_for_humans())  # "几秒前"

7. 配置管理

python-dotenv - 环境变量

pip install python-dotenv
# .env 文件
# DATABASE_URL=sqlite:///db.sqlite
# SECRET_KEY=your-secret-key
# DEBUG=true

from dotenv import load_dotenv
import os

load_dotenv()  # 加载.env文件

database_url = os.getenv('DATABASE_URL')
secret_key = os.getenv('SECRET_KEY')
debug = os.getenv('DEBUG', 'false').lower() == 'true'

PyYAML - YAML配置

pip install pyyaml
import yaml

# 读取YAML
with open('config.yaml', 'r', encoding='utf-8') as f:
    config = yaml.safe_load(f)

print(config['database']['host'])

# 写入YAML
data = {
    'database': {
        'host': 'localhost',
        'port': 3306
    }
}
with open('output.yaml', 'w', encoding='utf-8') as f:
    yaml.dump(data, f, allow_unicode=True)

Pydantic - 数据验证

pip install pydantic
from pydantic import BaseModel, validator
from typing import Optional

class User(BaseModel):
    name: str
    age: int
    email: Optional[str] = None
    
    @validator('age')
    def age_must_be_positive(cls, v):
        if v < 0:
            raise ValueError('年龄必须为正数')
        return v

# 创建实例(自动验证)
user = User(name='张三', age=25)
print(user.model_dump())  # {'name': '张三', 'age': 25, 'email': None}

# 从字典创建
data = {'name': '李四', 'age': 30, 'email': '[email protected]'}
user = User(**data)

8. 测试工具

pytest - 测试框架

pip install pytest
# test_example.py
import pytest

def add(a, b):
    return a + b

def test_add():
    assert add(1, 2) == 3
    assert add(-1, 1) == 0

def test_add_strings():
    assert add('hello', ' world') == 'hello world'

# 参数化测试
@pytest.mark.parametrize("a,b,expected", [
    (1, 2, 3),
    (0, 0, 0),
    (-1, 1, 0),
])
def test_add_parametrized(a, b, expected):
    assert add(a, b) == expected

# 异常测试
def test_divide_by_zero():
    with pytest.raises(ZeroDivisionError):
        1 / 0

# 运行: pytest test_example.py -v

unittest.mock - 模拟

from unittest.mock import Mock, patch, MagicMock

# 创建Mock对象
mock = Mock()
mock.method.return_value = 42
print(mock.method())  # 42

# 使用patch
def get_data():
    import requests
    return requests.get('https://api.example.com').json()

@patch('requests.get')
def test_get_data(mock_get):
    mock_get.return_value.json.return_value = {'key': 'value'}
    result = get_data()
    assert result == {'key': 'value'}

9. 实用工具

pathlib - 路径处理(内置)

from pathlib import Path

# 路径操作
path = Path('folder/file.txt')
print(path.name)      # file.txt
print(path.stem)      # file
print(path.suffix)    # .txt
print(path.parent)    # folder

# 路径拼接
new_path = path.parent / 'new_file.txt'

# 遍历目录
for file in Path('.').glob('*.py'):
    print(file)

# 读写文件
content = Path('file.txt').read_text(encoding='utf-8')
Path('output.txt').write_text('Hello', encoding='utf-8')

loguru - 日志

pip install loguru
from loguru import logger

# 基本使用
logger.debug("调试信息")
logger.info("一般信息")
logger.warning("警告")
logger.error("错误")

# 输出到文件
logger.add("file.log", rotation="10 MB")

# 带变量
name = "张三"
logger.info(f"用户 {name} 登录")

# 异常记录
try:
    1 / 0
except Exception:
    logger.exception("发生异常")

schedule - 任务调度

pip install schedule
import schedule
import time

def job():
    print("执行任务")

# 定时任务
schedule.every(10).seconds.do(job)
schedule.every().hour.do(job)
schedule.every().day.at("10:30").do(job)
schedule.every().monday.do(job)

while True:
    schedule.run_pending()
    time.sleep(1)

10. 总结

🔑 常用库速查表

领域用途
数据处理numpy, pandas数值计算、数据分析
可视化matplotlib, seaborn图表绑制
网络请求requests, httpxHTTP客户端
Excelopenpyxl, pandasExcel读写
Wordpython-docxWord文档
PDFPyPDF2, pdfplumberPDF处理
图像Pillow, opencv图像处理
数据库sqlalchemyORM
命令行click, argparseCLI工具
日期时间arrow, pendulum日期处理
配置pydantic, python-dotenv配置管理
测试pytest单元测试
日志loguru日志记录

✅ 学习检查清单

  • 了解数据处理库(numpy, pandas)
  • 会使用requests发送HTTP请求
  • 能处理Excel/Word文件
  • 了解命令行工具库
  • 会使用pytest编写测试

📖 下一步学习

了解了常用第三方库后,让我们学习项目打包与发布:


常见问题 FAQ

💬 怎么判断一个第三方库是否靠谱?

看PyPI下载量、GitHub星数、最近更新时间、文档质量。下载量>100万/月、最近3个月有更新、有完整文档的库基本靠谱。

💬 pip和uv怎么选?

uv是Rust实现的包管理器,速度比pip快10-100倍,且内置虚拟环境管理。新项目推荐uv,老项目继续用pip也没问题。


📘 系列导航

End of file.