Python编程必备库:掌握这些提升技能水平

学习 Python 必须掌握的库

引言

为提高开发效率,避免重复“造轮子”,我们需要掌握使用 Python 系统库和第三方库。本文列举了 Python 从入门到精通必须掌握的库,覆盖以下方面

  • 基础库

  • 数据处理和分析

  • Web 开发

  • 自动化与系统管理

  • 科学计算与 AI

  • 工具类库

  • 12b433f8-cb2a-46db-b26d-05624c49dc0e


    基础库

    1. os

    os 是 Python 内置的标准库,主要用于与操作系统交互,提供以下核心功能:

    1. 文件和目录操作(创建/删除/重命名/遍历)
    2. 环境变量管理(读取/设置系统变量)
    3. 路径处理(跨平台路径拼接/解析)
    4. 执行系统命令(如调用命令行程序)

    示例 1:遍历目录并统计文件

    import os
    
    def count_files(directory):
        """统计目录下各类文件的数量"""
        ext_counts = {}
        for root, dirs, files in os.walk(directory):
            for file in files:
                ext = os.path.splitext(file)[1]  # 获取文件扩展名
                ext_counts[ext] = ext_counts.get(ext, 0) + 1
        return ext_counts
    
    # 示例:统计当前目录下文件类型
    print(count_files('.'))
    # 输出:{'.py': 5, '.txt': 3, '.jpg': 2}
    

    关键方法说明

  • os.walk():递归遍历目录树
  • os.path.splitext():分离文件名和扩展名

  • 示例 2:跨平台路径拼接与环境变量读取

    import os
    
    # 示例1:安全拼接路径(自动处理不同操作系统的斜杠)
    config_path = os.path.join('config', 'app', 'settings.ini')
    print(f"配置文件路径:{config_path}")
    # Windows输出:config\app\settings.ini
    # Linux/Mac输出:config/app/settings.ini
    
    # 示例2:读取系统环境变量
    print(f"当前用户:{os.getenv('USERNAME') or os.getenv('USER')}")
    print(f"PATH变量前3项:{os.getenv('PATH').split(os.pathsep)[:3]}")
    

    关键方法说明

  • os.path.join():跨平台路径拼接
  • os.getenv():获取环境变量值
  • os.pathsep:路径分隔符(Windows是;,Linux/Mac是:

  • 2. sys

    sys 是 Python 内置的标准库,主要用于与 Python 解释器交互,提供以下核心功能:

    1. 命令行参数处理(获取脚本运行时传入的参数)
    2. 标准输入/输出控制(如重定向 stdin/stdout/stderr
    3. 解释器信息查询(Python 版本、模块搜索路径等)
    4. 程序退出控制(强制退出或返回状态码)

    示例 1:获取命令行参数

    import sys
    
    # 示例:计算传入数字的和
    if len(sys.argv) > 1:  # sys.argv[0] 是脚本名
        numbers = [float(arg) for arg in sys.argv[1:]]
        print(f"参数总和:{sum(numbers)}")
    else:
        print("请传入数字参数,例如:python script.py 10 20 30")
    
    # 命令行调用示例:
    # $ python script.py 5 3.2 7
    # 输出:参数总和:15.2
    

    关键变量

  • sys.argv:存储命令行参数的列表(字符串格式)

  • 示例 2:修改模块搜索路径

    import sys
    
    # 添加自定义模块路径
    sys.path.append("/path/to/your/modules")
    
    # 查看当前Python模块搜索路径
    print("模块搜索路径:")
    for path in sys.path:
        print(f" - {path}")
    
    # 典型输出:
    # - /usr/lib/python3.8
    # - /path/to/your/modules  ← 新增的路径
    

    关键方法

  • sys.path:Python 导入模块时的搜索路径列表
  • sys.path.append():动态添加新搜索路径

  • 3. dateutil

    dateutil 是 Python 的第三方日期时间处理库(python-dateutil),扩展了标准库 datetime 的功能,主要解决以下问题:

    1. 灵活解析日期字符串:自动识别多种日期格式(如 "2023-12-25""Jan 1, 2024""3 days ago"
    2. 复杂时间计算:支持相对时间(如“下个月的第2个周五”)
    3. 时区处理:比 datetime 更简单的时区转换

    示例 1:智能解析日期字符串

    from dateutil.parser import parse
    
    # 自动识别不同格式的日期
    date1 = parse("2023-12-25")           # 标准格式
    date2 = parse("Jan 1, 2024 5:30PM")  # 含英文月份和12小时制
    date3 = parse("3 days ago")           # 相对时间
    
    print(date1)  # 2023-12-25 00:00:00
    print(date2)  # 2024-01-01 17:30:00
    print(date3)  # 当前时间 - 3天
    

    关键函数:

  • parse():自动解析人类可读的日期字符串

  • 示例 2:计算相对时间(如“下个月的第2个周五”)

    from dateutil.relativedelta import relativedelta
    from dateutil.rrule import rrule, WEEKLY, FR
    
    # 获取当前日期
    from datetime import datetime
    today = datetime.now()
    
    # 计算下个月的第2个周五
    next_month = today + relativedelta(months=1)
    second_friday = list(rrule(
        WEEKLY,
        byweekday=FR,      # 周五
        count=2,           # 取2个周五
        dtstart=next_month.replace(day=1)  # 从下个月1号开始算
    ))[1]  # 取第2个结果
    
    print(f"下个月的第2个周五是: {second_friday.strftime('%Y-%m-%d')}")
    

    关键功能:

  • relativedelta:处理月份/年份的增减(自动处理不同月份的天数差异)

  • rrule:生成重复时间规则(类似日历循环事件)


  • 典型应用场景:

  • 日志分析(解析不同格式的时间戳)

  • 生成定期报告(如“每月最后一个工作日”)

  • 处理用户输入的自然语言日期

  • 4. json

    json 是 Python 内置的标准库,用于处理 JSON(JavaScript Object Notation) 数据格式,主要功能包括:

    1. 序列化(编码):将 Python 对象(字典、列表等)转换为 JSON 字符串
    2. 反序列化(解码): 将 JSON 字符串解析为 Python 对象
    3. 跨语言数据交换: JSON 是通用的数据格式,支持与 JavaScript/Java/PHP 等语言交互

    核心方法

    方法 作用
    json.dumps() 将 Python 对象转为 JSON 字符串
    json.loads() 将 JSON 字符串转为 Python 对象
    json.dump() 将 Python 对象写入 JSON 文件
    json.load() 从 JSON 文件读取数据

    示例 1:Python 对象 ↔ JSON 字符串

    import json
    
    # Python 字典 → JSON 字符串
    data = {
        "name": "张三",
        "age": 30,
        "skills": ["Python", "SQL"]
    }
    json_str = json.dumps(data, ensure_ascii=False, indent=2)  # 禁用ASCII转码,美化格式
    print(json_str)
    

    输出:

    {
      "name": "张三",
      "age": 30,
      "skills": ["Python", "SQL"]
    }
    

    JSON 字符串 → Python 对象

     parsed_data = json.loads('{"city": "北京", "population": 2171}')
     print(parsed_data["city"])  # 输出:北京
    

    示例 2:JSON 文件读写

    ​```python
    import json
    
    写入 JSON 文件
    with open("data.json", "w", encoding="utf-8") as f:
        json.dump({"temperature": 25.7, "humidity": 60}, f)
    
    读取 JSON 文件
    with open("data.json", "r", encoding="utf-8") as f:
        data = json.load(f)
        print(f"当前温度:{data['temperature']}℃")  # 输出:当前温度:25.7℃
    

    参数说明

  • ensure_ascii=False:允许非ASCII字符(如中文)直接显示
  • indent=2:格式化缩进,方便阅读

  • 文件操作对比

    操作 内存对象 → 文件 文件 → 内存对象
    函数 json.dump(obj, f) json.load(f)
    字符串 json.dumps(obj) json.loads(str)

    常见应用场景

    1. API 数据交互
    import requests
    response = requests.get("https://api.example.com/data")
    data = json.loads(response.text)
    
    1. 配置文件存储
    # 保存配置
    config = {"theme": "dark", "font_size": 14}
    with open("config.json", "w") as f:
        json.dump(config, f)
    
    1. 跨语言数据共享:与前端 JavaScript 通过 JSON 传递数据

    5. logging

    logging 是 Python 内置的日志记录库,用于程序运行时的信息记录、错误追踪和状态监控。相比直接使用 print(),它提供以下核心优势:

    1. 分级日志:支持 DEBUG/INFO/WARNING/ERROR/CRITICAL 5个日志级别
    2. 灵活输出:可同时输出到控制台、文件、邮件等
    3. 自动附加信息:记录时间、模块名、行号等上下文
    4. 线程安全:适合多线程/多进程环境

    示例 1:基础日志配置(输出到控制台)

    import logging
    
    # 配置日志格式和级别
    logging.basicConfig(
        level=logging.INFO,  # 只记录INFO及以上级别
        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
    )
    
    # 记录不同级别日志
    logging.debug("调试信息(不会显示)")  # 低于INFO级别
    logging.info("程序启动完成")
    logging.warning("磁盘空间不足")
    logging.error("数据库连接失败")
    
    # 输出示例:
    # 2023-12-25 14:30:00,123 - root - INFO - 程序启动完成
    # 2023-12-25 14:30:00,124 - root - WARNING - 磁盘空间不足
    

    关键参数说明:

  • level:过滤日志级别(DEBUG < INFO < WARNING < ERROR < CRITICAL

  • format

  • %(asctime)s:时间

  • %(name)s:日志器名称

  • %(levelname)s:日志级别


  • 示例 2:高级用法(日志同时写入文件和控制台)

    import logging
    
    # 创建日志器
    logger = logging.getLogger("my_app")
    logger.setLevel(logging.DEBUG)  # 捕获所有级别
    
    # 文件处理器(每天一个日志文件)
    from logging.handlers import TimedRotatingFileHandler
    file_handler = TimedRotatingFileHandler(
        filename="app.log",
        when="midnight",  # 每天午夜切割
        backupCount=7     # 保留7天日志
    )
    file_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
    
    # 控制台处理器
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.INFO)  # 控制台只显示INFO及以上
    
    # 添加处理器
    logger.addHandler(file_handler)
    logger.addHandler(console_handler)
    
    # 使用日志
    logger.debug("详细调试信息")  # 仅写入文件
    logger.info("用户登录成功")   # 同时写入文件和控制台
    

    运行结果:

  • 控制台输出:
  • 2023-12-25 14:35:00 - INFO - 用户登录成功
    
  • 文件 app.log 内容:
  • 2023-12-25 14:35:00 - DEBUG - 详细调试信息
    2023-12-25 14:35:00 - INFO - 用户登录成功
    

    实际应用场景

    1. Web服务错误监控
    try:
        response = requests.get(url)
    except Exception as e:
        logging.error(f"API请求失败: {e}", exc_info=True)  # 记录异常堆栈
    
    1. 定时任务日志归档
    from logging.handlers import RotatingFileHandler
    handler = RotatingFileHandler("task.log", maxBytes=10 * 1024 * 1024, backupCount=5)  # 单个文件10MB,保留5个
    
    1. 动态调整日志级别
    logging.getLogger().setLevel(logging.DEBUG if debug_mode else logging.INFO)
    

    数据处理与分析

    1. NumPy

    NumPy(Numerical Python)是 Python 的核心科学计算库,主要用于高效处理多维数组和矩阵运算。其核心功能包括:

    1. 高性能数组:提供 ndarray 数据结构,比原生 Python 列表快 10-100 倍
    2. 数学运算:内置向量化操作(避免显式循环)
    3. 广播机制:支持不同形状数组的自动对齐计算
    4. 线性代数/随机数生成: 提供矩阵运算、傅里叶变换等高级数学工具

    示例 1:基础数组操作

    import numpy as np
    
    # 创建数组
    arr = np.array([1, 2, 3, 4, 5])  # 一维数组
    matrix = np.array([[1, 2], [3, 4]])  # 二维矩阵
    
    # 向量化运算(无需循环)
    print(arr * 2)          # 输出:[ 2  4  6  8 10]
    print(matrix + 10)      # 输出:[[11 12] [13 14]]
    
    # 常用属性
    print(arr.shape)        # 输出:(5,) (数组形状)
    print(matrix.dtype)     # 输出:int64 (数据类型)
    

    示例 2:科学计算实战

    import numpy as np
    
    # 生成随机数据(1000个正态分布样本)
    data = np.random.normal(0, 1, 1000)  # 均值=0,标准差=1
    
    # 统计计算
    print(f"均值: {np.mean(data):.2f}")    # 输出:均值: 0.02
    print(f"标准差: {np.std(data):.2f}")   # 输出:标准差: 1.01
    
    # 矩阵运算
    A = np.array([[1, 2], [3, 4]])
    B = np.eye(2)  # 2x2单位矩阵
    print(A @ B)   # 矩阵乘法,输出:[[1. 2.] [3. 4.]]
    print(np.linalg.inv(A))  # 矩阵求逆,输出:[[-2.   1. ] [ 1.5 -0.5]]
    

    典型应用场景:

  • 机器学习数据预处理(如归一化)

  • 图像处理(3D 数组表示 RGB 通道)

  • 金融模型计算(蒙特卡洛模拟)


  • 2. pandas

    pandas 是 Python 的核心数据分析库,主要用于结构化数据的快速处理和分析。其核心功能包括:

    1. 表格数据处理: 提供 DataFrame(二维表)和 Series(一维列)数据结构
    2. 数据清洗: 处理缺失值、去重、类型转换等
    3. 高效查询: 支持类似 SQL 的筛选、分组、聚合操作
    4. 时间序列处理:专门优化针对时间数据的操作
    5. 数据输入/输出: 支持 CSV/Excel/SQL/JSON 等多种数据格式

    示例 1:数据清洗与分析

    import pandas as pd
    
    # 从CSV创建DataFrame
    df = pd.read_csv("sales.csv")
    print(df.head(3))  # 显示前3行
    
    # 数据清洗
    clean_df = df.dropna()  # 删除空值行
    clean_df["profit"] = clean_df["revenue"] - clean_df["cost"]  # 新增列
    
    # 分析数据
    top_products = clean_df.groupby("product")["profit"].sum().sort_values(ascending=False)
    print("利润最高的产品:\n", top_products.head())
    

    输出示例:

       product  revenue   cost
    0    Phone     1200    800
    1   Laptop     1500   1000
    2    Phone      900    600
    
    利润最高的产品:
    product
    Laptop    500
    Phone     700
    

    示例 2:时间序列处理

    # 创建时间序列数据
    date_rng = pd.date_range(start="2023-01-01", end="2023-01-10", freq="D")
    sales_data = pd.DataFrame({
        "date": date_rng,
        "sales": [100, 120, 90, 150, None, 200, 180, 130, 160, 110]
    })
    
    # 处理时间序列
    sales_data = sales_data.set_index("date")  # 将日期设为索引
    sales_data = sales_data.fillna(method="ffill")  # 用前一天数据填充空值
    
    # 计算7天移动平均
    sales_data["7d_avg"] = sales_data["sales"].rolling(7).mean()
    print(sales_data.tail(3))
    

    输出示例:

                sales    7d_avg
    date                       
    2023-01-08    130  	135.714
    2023-01-09    160  	138.571
    2023-01-10    110  	132.857
    

    3. openpyxl

    openpyxl 是 Python 中用于 读写 Excel 文件(.xlsx 格式) 的库,主要功能包括:

    1. 读写 Excel 文件:支持 .xlsx 格式(不支持旧的 .xls 格式)
    2. 操作工作表: 创建、删除、复制工作表
    3. 单元格级操作:读取/修改单元格数据、样式(字体、颜色、边框等)
    4. 公式计算:支持 Excel 公式(如 SUMVLOOKUP
    5. 图表生成: 可创建柱状图、折线图等

    示例 1:读取 Excel 文件

    from openpyxl import load_workbook
    
    # 加载现有 Excel 文件
    wb = load_workbook("example.xlsx")  
    sheet = wb.active  # 获取当前活动工作表
    
    # 读取单元格数据
    print(f"A1 单元格的值: {sheet['A1'].value}")
    
    # 遍历所有数据
    for row in sheet.iter_rows(values_only=True):
        print(row)  # 每行以元组形式输出
    
    # 输出示例:
    # A1 单元格的值: 姓名
    # ('姓名', '年龄', '城市')
    # ('张三', 25, '北京')
    # ('李四', 30, '上海')
    

    关键方法:

  • load_workbook():加载现有 Excel 文件

  • sheet.iter_rows():按行迭代数据


  • 示例 2:创建并格式化 Excel 文件

    from openpyxl import Workbook
    from openpyxl.styles import Font, Alignment
    
    # 创建新工作簿
    wb = Workbook()
    sheet = wb.active
    sheet.title = "员工信息"  # 修改工作表名称
    
    # 写入表头(加粗+居中)
    header = ["姓名", "部门", "工资"]
    sheet.append(header)
    for cell in sheet[1]:  # 第一行是表头
        cell.font = Font(bold=True)
        cell.alignment = Alignment(horizontal="center")
    
    # 写入数据
    data = [
        ["张三", "技术部", 15000],
        ["李四", "市场部", 12000]
    ]
    for row in data:
        sheet.append(row)
    
    # 保存文件
    wb.save("employees.xlsx")
    

    生成文件效果:

    姓名(加粗居中) 部门(加粗居中) 工资(加粗居中)
    张三 技术部 15000
    李四 市场部 12000

    4. SQLAlchemy

    SQLAlchemy 是 Python 的 ORM(对象关系映射)工具 和 SQL 工具包,核心功能包括:

    1. ORM 模式:将数据库表映射为 Python 类,行记录映射为对象。 用 Python 语法操作数据库,无需直接写 SQL。
    2. SQL 表达式语言: 提供比原生 SQL 更安全的查询构建方式。
    3. 数据库兼容: 支持 PostgreSQL/MySQL/SQLite/Oracle 等主流数据库。
    4. 连接池管理:自动管理数据库连接,提升性能。

    适用场景:Web 后端开发、数据分析管道、需要数据库交互的脚本


    示例 1:ORM 模式(定义表结构并操作数据)

    from sqlalchemy import create_engine, Column, Integer, String
    from sqlalchemy.orm import declarative_base, sessionmaker
    
    # 1. 定义基类和表结构
    Base = declarative_base()
    
    class User(Base):
        __tablename__ = 'users'
        id = Column(Integer, primary_key=True)
        name = Column(String(30))
        age = Column(Integer)
    
    # 2. 连接数据库(SQLite)
    engine = create_engine('sqlite:///example.db')
    Base.metadata.create_all(engine)  # 创建表
    
    # 3. 操作数据
    Session = sessionmaker(bind=engine)
    session = Session()
    
    # 插入数据
    new_user = User(name='张三', age=25)
    session.add(new_user)
    session.commit()
    
    # 查询数据
    users = session.query(User).filter(User.age > 20).all()
    for u in users:
        print(u.id, u.name, u.age)
    

    关键步骤:

    1. declarative_base() 创建 ORM 基类
    2. Column 定义字段类型
    3. session 管理数据库会话

    示例 2:SQL 表达式语言(直接执行 SQL 语句)

    from sqlalchemy import text
    from sqlalchemy import create_engine
    
    # 连接 MySQL
    engine = create_engine("mysql+pymysql://user:password@localhost/mydb")
    
    # 执行原生 SQL
    with engine.connect() as conn:
        # 插入数据
        conn.execute(text("INSERT INTO products (name, price) VALUES (:name, :price)"), 
                     {"name": "笔记本电脑", "price": 5999})
        
        # 参数化查询(防 SQL 注入)
        result = conn.execute(
            text("SELECT * FROM products WHERE price > :min_price"),
            {"min_price": 1000}
        )
        for row in result:
            print(row.name, row.price)
    

    安全特性:

  • text() 包装 SQL 语句

  • :param 参数化查询防止注入


  • Web 开发

    1. flask

    Flask 是 Python 的轻量级 Web 框架,核心功能包括:

    1. 路由管理:将 URL 路径映射到 Python 函数(如 /hellohello()
    2. 请求-响应处理: 解析 HTTP 请求(GET/POST 等),生成响应(HTML/JSON/文件等)
    3. 模板渲染: 使用 Jinja2 引擎动态生成 HTML
    4. 扩展生态: 可通过插件添加数据库、认证、API 等功能

    适用场景:快速开发小型 Web 应用、微服务、API 接口


    示例 1:基础 Web 应用(返回 HTML/JSON)

    from flask import Flask, jsonify
    
    app = Flask(__name__)
    
    # 路由:根路径返回 HTML
    @app.route("/")
    def home():
        return "<h1>欢迎访问首页!</h1>"
    
    # 路由:API 接口返回 JSON
    @app.route("/api/user/<username>")
    def user_info(username):
        return jsonify(
            username=username,
            role="admin" if username == "admin" else "user"
        )
    
    if __name__ == "__main__":
        app.run(debug=True)  # 启动开发服务器
    

    运行效果:

    1. 访问 http://127.0.0.1:5000/ → 显示 HTML 标题

    2. 访问 http://127.0.0.1:5000/api/user/alice → 返回 JSON:

    {"username": "alice", "role": "user"}
    

    示例 2:表单处理 + 模板渲染

    from flask import Flask, render_template, request
    
    app = Flask(__name__)
    
    # 渲染表单页面(GET 请求)
    @app.route("/login", methods=["GET"])
    def login_form():
        return render_template("login.html")  # 模板文件需放在 templates/ 目录下
    
    # 处理表单提交(POST 请求)
    @app.route("/login", methods=["POST"])
    def login():
        username = request.form.get("username")
        password = request.form.get("password")
        if username == "admin" and password == "123456":
            return f"<h2>欢迎, {username}!</h2>"
        else:
            return "<h2>登录失败</h2>"
    
    if __name__ == "__main__":
        app.run()
    

    模板文件 templates/login.html

    <form method="POST">
      <input type="text" name="username" placeholder="用户名" required>
      <input type="password" name="password" placeholder="密码" required>
      <button type="submit">登录</button>
    </form>
    

    关键功能:

  • request.form 获取 POST 表单数据

  • render_template 渲染 Jinja2 模板


  • 2. Django

    Django 是 Python 的高层次 全功能 Web 框架,遵循 “Batteries Included”(开箱即用)设计理念,核心功能包括:

    1. 快速开发: 内置 ORM、Admin 后台、用户认证等组件
    2. MVC 架构: 严格遵循 Model-View-Template 模式(Django 中称为 MTV)
    3. 安全防护: 自动处理 SQL 注入、XSS、CSRF 等安全问题
    4. 可扩展性: 支持从博客系统到企业级复杂应用

    适用场景:内容管理系统(CMS)、社交网站、数据驱动的复杂 Web 应用


    示例 1:创建博客应用(模型 + 后台管理)

    1. 创建项目和应用
    django-admin startproject myblog
    cd myblog
    python manage.py startapp blog
    
    1. 定义模型(blog/models.py
    from django.db import models
    
    class Post(models.Model):
        title = models.CharField(max_length=100)
        content = models.TextField()
        created_at = models.DateTimeField(auto_now_add=True)
    
        def __str__(self):
            return self.title
    
    1. 启用 Admin 后台(blog/admin.py
    from django.contrib import admin
    from .models import Post
    
    admin.site.register(Post)
    
    1. 运行开发服务器
    python manage.py makemigrations
    python manage.py migrate
    python manage.py createsuperuser  # 创建管理员账号
    python manage.py runserver
    

    访问 http://127.0.0.1:8000/admin 可管理博客文章:
    https://docs.djangoproject.com/en/4.2/_images/admin01.png


    示例 2:构建 REST API(Django REST framework)

    1. 安装 DRF
    pip install djangorestframework
    
    1. 创建 API(blog/serializers.py
    from rest_framework import serializers
    from .models import Post
    
    class PostSerializer(serializers.ModelSerializer):
        class Meta:
            model = Post
            fields = ['id', 'title', 'content', 'created_at']
    
    1. 编写视图(blog/views.py
    from rest_framework import generics
    from .models import Post
    from .serializers import PostSerializer
    
    class PostListAPIView(generics.ListCreateAPIView):
        queryset = Post.objects.all()
        serializer_class = PostSerializer
    
    1. 配置路由(blog/urls.py
    from django.urls import path
    from .views import PostListAPIView
    
    urlpatterns = [
        path('api/posts/', PostListAPIView.as_view()),
    ]
    

    访问 http://127.0.0.1:8000/api/posts/ 获取 JSON 格式的文章列表:

    [
        {
            "id": 1,
            "title": "First Post",
            "content": "Hello Django!",
            "created_at": "2023-12-25T00:00:00Z"
        }
    ]
    

    3. FastAPI

    FastAPI 是一个现代、快速(高性能)的 Python Web 框架,专门用于构建 API(如 RESTful API、WebSocket 等),核心优势包括:

    1. 极高性能:基于 Starlette(异步框架)和 Pydantic(数据验证),速度接近 Node.js 和 Go
    2. 自动文档生成:内置 Swagger UI 和 ReDoc,自动生成交互式 API 文档
    3. 类型提示支持:利用 Python 类型注解(Type Hints)实现数据验证和编辑器智能提示
    4. 异步支持:原生支持 async/await,适合高并发场景(如爬虫、实时通信)

    适用场景:微服务、数据接口、机器学习模型部署、实时应用


    示例 1:基础 REST API(自动文档+数据验证)

    from fastapi import FastAPI
    from pydantic import BaseModel
    
    app = FastAPI()
    
    # 定义数据模型
    class Item(BaseModel):
        name: str
        price: float
        is_offer: bool = None  # 可选字段
    
    # 路由:GET 请求
    @app.get("/")
    def read_root():
        return {"message": "Hello FastAPI"}
    
    # 路由:带路径参数的 GET
    @app.get("/items/{item_id}")
    def read_item(item_id: int, q: str = None):
        return {"item_id": item_id, "q": q}
    
    # 路由:POST 请求(自动验证请求体)
    @app.post("/items/")
    def create_item(item: Item):
        return {"item_name": item.name, "price": item.price}
    
    if __name__ == "__main__":
        import uvicorn
        uvicorn.run(app, host="0.0.0.0", port=8000)
    

    运行后访问:

    1. API 文档:http://127.0.0.1:8000/docs(Swagger UI)
      https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png
    2. 直接测试接口:http://127.0.0.1:8000/items/5?q=test

    示例 2:异步数据库查询(MySQL + SQLAlchemy)

    from fastapi import FastAPI, HTTPException
    from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
    from sqlalchemy.orm import sessionmaker
    from sqlalchemy import Column, Integer, String
    from sqlalchemy.ext.declarative import declarative_base
    import os
    
    # 配置数据库(异步MySQL驱动)
    DATABASE_URL = "mysql+asyncmy://user:password@localhost/dbname"
    engine = create_async_engine(DATABASE_URL)
    AsyncSessionLocal = sessionmaker(engine, class_=AsyncSession)
    
    Base = declarative_base()
    
    # 定义模型
    class User(Base):
        __tablename__ = "users"
        id = Column(Integer, primary_key=True)
        name = Column(String(50))
    
    app = FastAPI()
    
    # 异步获取用户
    @app.get("/users/{user_id}")
    async def get_user(user_id: int):
        async with AsyncSessionLocal() as session:
            user = await session.get(User, user_id)
            if not user:
                raise HTTPException(status_code=404, detail="User not found")
            return {"id": user.id, "name": user.name}
    
    # 创建表(实际项目应使用 Alembic 迁移)
    @app.on_event("startup")
    async def init_db():
        async with engine.begin() as conn:
            await conn.run_sync(Base.metadata.create_all)
    

    关键点:

  • 使用 asyncmyasyncpg 等异步数据库驱动

  • 通过 AsyncSession 实现非阻塞查询


  • 4. BeautifulSoup4

    BeautifulSoup4(简称 bs4)是 Python 的 HTML/XML 解析库,主要用于从网页中提取结构化数据。其核心功能包括:

    1. 解析混乱的 HTML:自动修复缺失的标签(如 <p> 未闭合)
    2. 灵活的节点查找: 支持通过标签名、CSS 类、ID、属性等定位元素
    3. 树形结构导航: 可遍历父节点、子节点、兄弟节点
    4. 与请求库无缝集成: 常配合 requestsurllib 使用

    适用场景:网页爬虫、数据抓取、内容分析


    示例 1:解析静态网页(提取标题和链接)

    import requests
    from bs4 import BeautifulSoup
    
    # 获取网页内容
    url = "https://example.com"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, "html.parser")  # 使用内置的 html.parser
    
    # 提取所有 <a> 标签的链接和文本
    for link in soup.find_all("a"):
        print(f"文本: {link.text.strip()}")
        print(f"链接: {link.get('href')}\n")
    
    # 提取特定类的元素
    featured = soup.find("div", class_="featured")
    if featured:
        print("特色内容:", featured.text)
    

    输出示例:

    文本: 首页
    链接: /index.html
    
    文本: 关于我们
    链接: /about.html
    

    示例 2:处理动态生成的内容(配合 CSS 选择器)

    from bs4 import BeautifulSoup
    
    # 假设这是 JavaScript 动态生成的 HTML
    html = """
    <html>
      <body>
        <ul id="products">
          <li class="product" data-price="299">笔记本 <span>库存: 5</span></li>
          <li class="product" data-price="599">手机 <span>库存: 2</span></li>
        </ul>
      </body>
    </html>
    """
    
    soup = BeautifulSoup(html, "lxml")  # 需要安装 lxml: pip install lxml
    
    # 使用 CSS 选择器提取商品信息
    products = soup.select("#products .product")
    for product in products:
        name = product.contents[0].strip()  # 获取第一个文本节点
        price = product["data-price"]
        stock = product.span.text.split(":")[1].strip()
        print(f"{name} | 价格: {price}元 | 库存: {stock}")
    

    输出结果:

    笔记本 | 价格: 299元 | 库存: 5
    手机 | 价格: 599元 | 库存: 2
    

    核心方法对比

    方法 等效 CSS 选择器 用途
    soup.find("div") div 查找第一个 div 标签
    soup.find_all("p") p 查找所有 p 标签
    soup.select(".header") .header 查找 class=“header” 的元素
    soup.select("#main") #main 查找 id=“main” 的元素
    soup.find("a", href=True) a[href] 查找带 href 属性的 a 标签

    自动化与系统管理

    1. Selenium

    Selenium 是 Python 的 浏览器自动化工具,主要用于:

    1. Web 自动化测试: 模拟用户操作(点击、输入、滚动等)
    2. 动态网页数据抓: 获取 JavaScript 渲染后的页面内容
    3. 跨浏览器兼容性测试: 支持 Chrome/Firefox/Edge/Safari 等主流浏览器
    4. 处理复杂交互: 文件上传、弹窗处理、Cookie 管理等

    适用场景:需要与浏览器交互的自动化任务,如爬取动态内容、自动化表单提交、UI 测试等


    示例 1:自动登录网站

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys
    
    # 启动 Chrome 浏览器
    driver = webdriver.Chrome()  # 需确保 chromedriver 在 PATH 中
    
    # 打开登录页面
    driver.get("https://example.com/login")
    
    # 定位元素并操作
    driver.find_element(By.ID, "username").send_keys("your_username")
    driver.find_element(By.ID, "password").send_keys("your_password" + Keys.RETURN)
    
    # 验证登录成功
    assert "Dashboard" in driver.title
    
    # 关闭浏览器
    driver.quit()
    

    关键方法:

  • find_element(By.XX, "value"):定位元素(支持 ID/CLASS/XPATH 等)
  • send_keys():模拟键盘输入
  • Keys.RETURN:模拟回车键

  • 示例 2:抓取动态加载的数据

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    driver = webdriver.Chrome()
    driver.get("https://quotes.toscrape.com/scroll")
    
    # 等待页面加载并滚动到底部
    wait = WebDriverWait(driver, 10)
    while True:
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        try:
            # 等待“加载更多”按钮出现
            element = wait.until(
                EC.presence_of_element_located((By.CSS_SELECTOR, ".load-more"))
            )
            element.click()
        except:
            break  # 没有更多内容时退出循环
    
    # 提取所有名言
    quotes = driver.find_elements(By.CLASS_NAME, "quote")
    for quote in quotes:
        print(quote.find_element(By.CLASS_NAME, "text").text)
    
    driver.quit()
    

    输出示例:

    "The world as we have created it is a process of our thinking..."
    "Life is what happens when you're busy making other plans..."
    

    关键功能:

  • WebDriverWait:显式等待元素加载

  • execute_script():执行 JavaScript 代码(如滚动页面)

  • expected_conditions:定义等待条件(如元素可见、可点击等)


  • 2. PyAutoGUI

    PyAutoGUI 是 Python 的 跨平台 GUI 自动化库,主要用于模拟鼠标、键盘操作和屏幕交互,核心功能包括:

    1. 鼠标控制: 移动、点击、拖拽、滚动
    2. 键盘操作: 输入文本、快捷键组合、特殊按键(如 Ctrl+C
    3. 屏幕处理: 截图、定位图像位置(如按钮图标)
    4. 简单OCR: 结合 pytesseract 识别屏幕文字

    适用场景:自动化重复性桌面任务、游戏脚本、GUI 测试、批量处理等


    示例 1:自动打开画图软件并绘图

    import pyautogui
    import time
    
    # 安全设置:当鼠标移动到屏幕角落时终止程序
    pyautogui.FAILSAFE = True
    
    # 打开 Windows 画图软件
    pyautogui.hotkey('win', 'r')  # Win+R 打开运行窗口
    pyautogui.write('mspaint')    # 输入程序名
    pyautogui.press('enter')      # 回车确认
    time.sleep(2)                 # 等待画图软件启动
    
    # 选择画笔工具
    pyautogui.click(x=100, y=200)  # 点击画笔图标位置(需根据实际屏幕调整坐标)
    
    # 绘制三角形
    pyautogui.dragTo(300, 200, duration=0.5)  # 向右拖动
    pyautogui.dragTo(200, 400, duration=0.5)  # 向下拖动
    pyautogui.dragTo(100, 200, duration=0.5)   # 向左上拖动
    

    关键方法:

  • hotkey():组合键(如 Ctrl+C

  • write():模拟键盘输入

  • dragTo():按住拖动


  • 示例 2:自动化批量截图并保存

    import pyautogui
    import time
    
    # 定义截图区域 (left, top, width, height)
    region = (0, 0, 800, 600)
    
    for i in range(3):
        # 截图并保存
        screenshot = pyautogui.screenshot(region=region)
        screenshot.save(f'screenshot_{i}.png')
        
        # 模拟滚动(向下滚动3次)
        pyautogui.scroll(-500)  # 负数表示向下滚动
        time.sleep(1)
    
    # 定位屏幕上特定图像(如按钮图标)
    button_pos = pyautogui.locateOnScreen('button.png', confidence=0.8)
    if button_pos:
        pyautogui.click(button_pos)
    

    关键功能:

  • screenshot():截取屏幕或指定区域

  • locateOnScreen():图像匹配定位(需提前保存目标图片)

  • confidence 参数:匹配相似度阈值(0~1)


  • 3. Paramiko

    Paramiko 是 Python 的 SSHv2 协议库,用于安全地连接远程服务器并执行操作,核心功能包括:

    1. 远程命令执行: 在 Linux/Windows 服务器上运行 Shell 命令
    2. 文件传输: 通过 SFTP 上传/下载文件
    3. 端口转发: 建立 SSH 隧道实现加密通信
    4. 密钥认证: 支持密码和公私钥登录

    适用场景:服务器批量管理、自动化运维、CI/CD 部署、网络设备配置


    示例 1:执行远程命令(获取服务器信息)

    import paramiko
    
    # 创建SSH客户端
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  # 自动接受未知主机密钥
    
    # 连接服务器(密码认证)
    ssh.connect(
        hostname="192.168.1.100",
        port=22,
        username="root",
        password="your_password"
    )
    
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command("df -h && free -m")
    print(stdout.read().decode())  # 打印磁盘和内存使用情况
    
    # 关闭连接
    ssh.close()
    

    输出示例:

    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda1        50G   20G   30G  40% /
    mem:           7982   512   7470   6% free
    

    示例 2:SFTP 文件传输(上传/下载)

    import paramiko
    
    # 建立SSH连接
    transport = paramiko.Transport(("192.168.1.100", 22))
    transport.connect(username="user", password="password")
    
    # 创建SFTP客户端
    sftp = paramiko.SFTPClient.from_transport(transport)
    
    # 上传本地文件到远程服务器
    sftp.put("local_file.txt", "/remote/path/file.txt")
    
    # 下载远程文件到本地
    sftp.get("/remote/path/data.csv", "local_data.csv")
    
    # 关闭连接
    sftp.close()
    transport.close()
    

    关键方法:

  • put():上传文件

  • get():下载文件

  • listdir():列出远程目录


  • 4. psutil

    psutil(Process and System Utilities)是 Python 的 跨平台系统监控库,用于获取系统和进程的运行信息,核心功能包括:

    1. 系统资源监控: CPU、内存、磁盘、网络等实时使用情况
    2. 进程管理: 获取进程列表、资源占用、终止进程等
    3. 跨平台支持: 兼容 Windows、Linux、macOS 等操作系统
    4. 低开销: 直接调用系统原生接口,性能高效

    适用场景:系统监控工具、性能分析、资源告警、任务管理器开发


    示例 1:监控系统资源(CPU/内存/磁盘)

    import psutil
    
    # 获取 CPU 信息
    print(f"CPU 核心数: {psutil.cpu_count(logical=False)} (物理), {psutil.cpu_count()} (逻辑)")
    print(f"CPU 使用率: {psutil.cpu_percent(interval=1)}%")  # 1秒内的平均使用率
    
    # 获取内存信息
    mem = psutil.virtual_memory()
    print(f"内存总量: {mem.total / 1024 ** 3:.2f} GB")
    print(f"内存使用率: {mem.percent}%")
    
    # 获取磁盘信息
    disk = psutil.disk_usage('/')
    print(f"磁盘总量: {disk.total / 1024 ** 3:.2f} GB")
    print(f"磁盘使用率: {disk.percent}%")
    

    输出示例:

    CPU 核心数: 4 (物理), 8 (逻辑)
    CPU 使用率: 15.5%
    内存总量: 15.62 GB
    内存使用率: 34.2%
    磁盘总量: 465.76 GB
    磁盘使用率: 72.1%
    

    示例 2:监控进程并终止占用高的进程

    import psutil
    
    # 获取所有进程信息
    for proc in psutil.process_iter(['pid', 'name', 'cpu_percent', 'memory_percent']):
        if proc.info['cpu_percent'] > 10:  # CPU占用超过10%的进程
            print(f"高CPU进程: PID={proc.info['pid']}, 名称={proc.info['name']}, CPU={proc.info['cpu_percent']}%")
    
        if proc.info['memory_percent'] > 5:  # 内存占用超过5%的进程
            print(f"高内存进程: PID={proc.info['pid']}, 名称={proc.info['name']}, 内存={proc.info['memory_percent']}%")
    
    # 终止指定进程(例如PID=1234)
    try:
        p = psutil.Process(1234)
        p.terminate()  # 终止进程
        print(f"已终止进程: {p.name()}")
    except psutil.NoSuchProcess:
        print("进程不存在")
    

    关键方法:

  • process_iter():遍历所有进程

  • cpu_percent() / memory_percent():进程资源占用

  • terminate():终止进程


  • 科学计算与AI

    1. Matplotlib

    Matplotlib 是 Python 的 核心数据可视化库,用于创建高质量的静态、动态和交互式图表,核心功能包括:

    1. 2D/3D 图表绘制: 折线图、柱状图、散点图、饼图、热力图等
    2. 高度可定制化: 调整颜色、标签、图例、网格等样式
    3. 多输出格式支持: 导出为 PNG/PDF/SVG 等格式
    4. 与其他库无缝集成:与 NumPy、Pandas、SciPy 协同工作

    适用场景:数据分析报告、学术论文图表、机器学习结果可视化


    示例 1:绘制折线图与柱状图

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 生成数据
    x = np.linspace(0, 10, 100)
    y = np.sin(x)
    
    # 创建画布和子图
    fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4))
    
    # 折线图
    ax1.plot(x, y, color='red', linestyle='--', label='sin(x)')
    ax1.set_title("Sine Wave")
    ax1.set_xlabel("X-axis")
    ax1.set_ylabel("Y-axis")
    ax1.legend()
    
    # 柱状图
    categories = ['A', 'B', 'C']
    values = [15, 25, 10]
    ax2.bar(categories, values, color=['blue', 'green', 'orange'])
    ax2.set_title("Bar Chart")
    
    plt.tight_layout()  # 自动调整子图间距
    plt.savefig("combined_plot.png")  # 保存为图片
    plt.show()
    

    示例 2:绘制多子图与3D图形

    from mpl_toolkits.mplot3d import Axes3D
    
    # 创建画布
    fig = plt.figure(figsize=(10, 5))
    
    # 子图1:散点图
    ax1 = fig.add_subplot(121)
    x = np.random.rand(50)
    y = x + np.random.rand(50) * 0.1
    ax1.scatter(x, y, color='purple', alpha=0.6)
    ax1.set_title("Scatter Plot")
    
    # 子图2:3D曲面
    ax2 = fig.add_subplot(122, projection='3d')
    X = np.arange(-5, 5, 0.25)
    Y = np.arange(-5, 5, 0.25)
    X, Y = np.meshgrid(X, Y)
    Z = np.sin(np.sqrt(X**2 + Y**2))
    ax2.plot_surface(X, Y, Z, cmap='viridis')
    ax2.set_title("3D Surface")
    
    plt.tight_layout()
    plt.show()
    

    2. scikit-learn

    Scikit-learn 库的作用
    scikit-learn 是 Python 的 核心机器学习库,提供统一的 API 实现以下功能:

    1. 监督学习: 分类(如 SVM、随机森林)、回归(如线性回归、决策树回归)。
    2. 无监督学习:聚类(如 K-Means、DBSCAN)、 降维(如 PCA、t-SNE)。
    3. 数据预处理: 标准化、缺失值填充、特征编码。
    4. 模型评估: 交叉验证、性能指标(准确率、F1-score 等)。

    📌 特点:

  • 接口统一(fit()/predict() 方法)
  • 与 NumPy/Pandas 无缝集成
  • 适合中小规模数据(大数据推荐用 Spark MLlib)

  • 示例 1:鸢尾花分类(监督学习)

    from sklearn.datasets import load_iris
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import accuracy_score
    
    # 加载数据
    iris = load_iris()
    X, y = iris.data, iris.target
    
    # 划分训练集/测试集
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
    
    # 训练模型
    clf = RandomForestClassifier(n_estimators=100)
    clf.fit(X_train, y_train)
    
    # 预测并评估
    y_pred = clf.predict(X_test)
    print(f"准确率: {accuracy_score(y_test, y_pred):.2f}")
    
    # 输出特征重要性
    print("特征重要性:", clf.feature_importances_)
    

    输出示例:

    准确率: 0.97
    特征重要性: [0.11 0.02 0.42 0.45]
    

    示例 2:手写数字降维(无监督学习)

    from sklearn.datasets import load_digits
    from sklearn.decomposition import PCA
    import matplotlib.pyplot as plt
    
    # 加载手写数字数据集(8x8像素图像)
    digits = load_digits()
    X = digits.data  # 64维特征(8x8展平)
    
    # 用PCA降维到2D
    pca = PCA(n_components=2)
    X_pca = pca.fit_transform(X)
    
    # 可视化
    plt.scatter(X_pca[:, 0], X_pca[:, 1], c=digits.target, alpha=0.6, cmap='tab10')
    plt.colorbar(label='数字类别')
    plt.xlabel("PCA 主成分1")
    plt.ylabel("PCA 主成分2")
    plt.title("手写数字PCA降维")
    plt.show()
    

    3. tensorflow/pytorch

    TensorFlowPyTorch 是 Python 的 深度学习框架,用于构建和训练神经网络,核心功能包括:

    1. 张量计算: 支持 GPU/TPU 加速的高性能数值计算。
    2. 自动微分: 自动计算梯度(反向传播)。
    3. 神经网络构建:提供预定义层(卷积层、LSTM 等)和损失函数。
    4. 模型部署: 支持导出到移动端/嵌入式设备(TensorFlow Lite)。

    📌 适用场景:图像识别、自然语言处理、强化学习、科学计算


    TensorFlow 示例
    示例 1:MNIST 手写数字分类

    import tensorflow as tf
    from tensorflow.keras import layers
    
    # 加载数据
    (x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
    x_train = x_train.reshape(-1, 28 * 28).astype('float32') / 255  # 归一化
    
    # 构建模型
    model = tf.keras.Sequential([
        layers.Dense(128, activation='relu'),
        layers.Dense(10, activation='softmax')
    ])
    
    # 训练
    model.compile(optimizer='adam',
                  loss='sparse_categorical_crossentropy',
                  metrics=['accuracy'])
    model.fit(x_train, y_train, epochs=5)
    
    # 评估
    loss, acc = model.evaluate(x_test.reshape(-1, 28 * 28), y_test)
    print(f"测试集准确率: {acc:.2f}")
    

    输出:

    Epoch 1/5
    1875/1875 [==============================] - 3s 1ms/step
    测试集准确率: 0.97
    

    示例 2:图像生成(GAN)

    # 生成器网络
    generator = tf.keras.Sequential([
        layers.Dense(7 * 7 * 256, use_bias=False),
        layers.BatchNormalization(),
        layers.LeakyReLU(),
        layers.Reshape((7, 7, 256)),
        layers.Conv2DTranspose(128, (5,5), strides=(1,1), padding='same'),
        layers.Conv2DTranspose(64, (5,5), strides=(2,2), padding='same'),
        layers.Conv2DTranspose(1, (5,5), strides=(2,2), padding='same', activation='tanh')
    ])
    
    # 生成随机图像
    noise = tf.random.normal([1, 100])
    generated_image = generator(noise, training=False)
    plt.imshow(generated_image[0, :, :, 0], cmap='gray')
    

    PyTorch 示例
    示例 1:线性回归

    import torch
    import torch.nn as nn
    
    # 数据准备
    X = torch.tensor([[1], [2], [3]], dtype=torch.float32)
    Y = 2 * X + 1  # 真实关系: y=2x+1
    
    # 定义模型
    model = nn.Linear(1, 1)
    criterion = nn.MSELoss()
    optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
    
    # 训练
    for epoch in range(100):
        y_pred = model(X)
        loss = criterion(y_pred, Y)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
    
    print(f"权重: {model.weight.item():.2f}, 偏置: {model.bias.item():.2f}")
    

    输出:

    权重: 2.00, 偏置: 1.00
    

    示例 2:图像分类(ResNet)

    import torchvision.models as models
    
    # 加载预训练模型
    resnet = models.resnet18(pretrained=True)
    
    # 预测示例图像
    from PIL import Image
    img = Image.open('cat.jpg').resize((224,224))
    img_tensor = torchvision.transforms.ToTensor()(img).unsqueeze(0)
    
    # 推理
    output = resnet(img_tensor)
    print(f"预测类别: {torch.argmax(output)}")
    

    核心对比

    特性 TensorFlow PyTorch
    开发公司 Google Facebook
    计算图 静态图(默认) 动态图(更灵活)
    部署能力 强(TF Serving/Lite) 需转换(TorchScript)
    学术界使用率 30% 70%
    代码风格 声明式 命令式

    4. OpenCV-Python

    OpenCV-Python 是 计算机视觉 的核心库,提供 2500+ 优化算法,核心功能包括:

    1. 图像处理: 滤波、边缘检测、直方图操作
    2. 视频分析: 运动检测、对象跟踪
    3. 特征提取: SIFT、ORB、人脸关键点检测
    4. 机器学习集成: 支持 K-Means、SVM 等算法
    5. 硬件加速:支持 CUDA 和 OpenCL

    特点:

  • C++ 底层加速,Python 接口易用
  • 实时性能优异(可达 100+ FPS)
  • 跨平台(Windows/Linux/Android/iOS)

  • 示例 1:图像处理(边缘检测+人脸识别)

    import cv2
    import matplotlib.pyplot as plt
    
    # 读取图片
    img = cv2.imread('input.jpg')
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 转灰度图
    
    # Canny边缘检测
    edges = cv2.Canny(gray, 100, 200)
    
    # 人脸检测(Haar级联)
    face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
    faces = face_cascade.detectMultiScale(gray, 1.1, 4)
    
    # 标记人脸
    for (x,y,w,h) in faces:
        cv2.rectangle(img, (x,y), (x+w,y+h), (255,0,0), 2)
    
    # 显示结果
    plt.figure(figsize=(12,4))
    plt.subplot(131), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)), plt.title('人脸检测')
    plt.subplot(132), plt.imshow(gray, cmap='gray'), plt.title('灰度图')
    plt.subplot(133), plt.imshow(edges, cmap='gray'), plt.title('边缘检测')
    plt.show()
    

    示例 2:实时视频处理(摄像头+物体跟踪)

    import cv2
    
    # 初始化摄像头
    cap = cv2.VideoCapture(0)
    tracker = cv2.TrackerCSRT_create()  # 创建跟踪器
    
    # 第一帧选择ROI
    ret, frame = cap.read()
    bbox = cv2.selectROI("Tracking", frame, False)
    tracker.init(frame, bbox)
    
    while True:
        ret, frame = cap.read()
        if not ret: break
        
        # 更新跟踪器
        success, bbox = tracker.update(frame)
        if success:
            x,y,w,h = [int(i) for i in bbox]
            cv2.rectangle(frame, (x,y), (x+w,y+h), (0,255,0), 2)
        
        # 显示帧率
        fps = cap.get(cv2.CAP_PROP_FPS)
        cv2.putText(frame, f"FPS: {int(fps)}", (10,30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,255), 2)
        
        cv2.imshow("Tracking", frame)
        if cv2.waitKey(1) == 27:  # ESC退出
            break
    
    cap.release()
    cv2.destroyAllWindows()
    

    关键功能:

  • TrackerCSRT_create():高精度跟踪算法

  • selectROI():交互式选择跟踪区域

  • CAP_PROP_FPS:获取实时帧率


  • 工具类库

    1. tqdm

    tqdm(阿拉伯语 “taqadum” 的缩写,意为 “进展”)是 Python 的 进度条工具库,核心功能包括:

    1. 实时进度可视化: 在循环或迭代操作中显示进度条、剩余时间和速度。
    2. 低侵入性: 只需封装现有迭代器,无需大幅修改代码
    3. 多功能支持: 支持命令行、Jupyter Notebook、GUI 等环境
    4. 性能开销极低: 进度更新频率自动优化,几乎不影响原程序速度

    适用场景:数据处理、文件下载、模型训练、批量任务等需要长时间等待的操作


    示例 1:基本循环进度条

    from tqdm import tqdm
    import time
    
    # 在 range 循环中添加进度条
    for i in tqdm(range(100), desc="处理进度"):
        time.sleep(0.02)  # 模拟耗时操作
    
    # 输出效果:
    # 处理进度: 100%|██████████| 100/100 [00:02<00:00, 49.99it/s]
    

    关键参数:

  • desc:进度条前的描述文字

  • unit:单位(默认 “it” 即迭代次数)

  • colour:进度条颜色(如 'green'


  • 示例 2:文件下载与处理

    import requests
    from tqdm import tqdm
    
    url = "https://example.com/bigfile.zip"
    response = requests.get(url, stream=True)
    total_size = int(response.headers.get('content-length', 0))
    
    # 下载文件并显示进度
    with open("bigfile.zip", "wb") as f:
        for chunk in tqdm(
            response.iter_content(1024),
            total=total_size,
            unit='B',
            unit_scale=True,
            desc="下载进度"
        ):
            f.write(chunk)
    
    # 输出效果:
    # 下载进度: 100%|██████████| 150M/150M [00:05<00:00, 30.1MB/s]
    

    参数说明:

  • unit_scale:自动转换单位(B → KB → MB)

  • total:总大小(用于计算百分比)


  • 2. Click

    Click 是 Python 的 命令行工具开发库,用于快速构建功能强大的 CLI(命令行界面)应用,核心功能包括:

    1. 简化参数解析: 自动生成 --help 文档,支持选项/参数/子命令。
    2. 类型转换与验证: 自动将输入参数转为 Python 类型(如 int/float/文件路径)。
    3. 彩色输出支持: 内置 ANSI 颜色格式化。
    4. 可组合设计: 支持嵌套命令和复杂参数结构。

    特点:

  • 比标准库 argparse 代码量减少 50%
  • 被 Flask、Django 等知名项目用于管理命令

  • 示例 1:基础命令(计算幂运算)

    import click
    
    @click.command()
    @click.option('--base', type=int, help='底数', required=True)
    @click.option('--exp', type=int, default=2, help='指数(默认2)')
    def cli(base, exp):
        """计算 base 的 exp 次方"""
        result = base ** exp
        click.echo(f"结果: {click.style(str(result), fg='green')}")
    
    if __name__ == '__main__':
        cli()
    

    使用方式:

    python demo.py --base 3 --exp 4
    # 输出: 结果: 81 (绿色文字)
    

    自动生成的帮助文档:

    python demo.py --help
    

    输出:

    Usage: demo.py [OPTIONS]
    
      计算 base 的 exp 次方
    
    Options:
      --base INTEGER  底数 [required]
      --exp INTEGER   指数(默认2)
      --help          Show this message and exit.
    

    示例 2:文件处理工具(含子命令)

    import click
    from pathlib import Path
    
    @click.group()
    def cli():
        """文件管理工具"""
        pass
    
    @cli.command()
    @click.argument('path', type=click.Path(exists=True))
    def info(path):
        """显示文件信息"""
        p = Path(path)
        click.echo(f"大小: {p.stat().st_size} 字节")
        click.echo(f"修改时间: {p.stat().st_mtime}")
    
    @cli.command()
    @click.argument('src', type=click.Path(exists=True))
    @click.argument('dst', type=click.Path())
    def copy(src, dst):
        """复制文件"""
        with open(src, 'rb') as f1, open(dst, 'wb') as f2:
            with click.progressbar(f1, label='复制进度') as bar:
                for chunk in bar:
                    f2.write(chunk)
        click.secho("复制完成!", fg='bright_green')
    
    if __name__ == '__main__':
        cli()
    

    功能演示:

    # 显示帮助
    python file_tool.py --help
    
    # 子命令用法
    python file_tool.py info /path/to/file
    python file_tool.py copy source.txt target.txt
    

    交互效果:

    复制进度 [####################################] 100%
    复制完成! (亮绿色文字)
    

    3. Faker

    Faker 是 Python 的 假数据生成库,用于快速生成逼真的测试数据,核心功能包括:

    1. 多语言支持: 支持中文、英文、日文等 20+ 语言地区的假数据。
    2. 丰富的数据类别: 姓名/地址/公司/日期/电话号码/车牌号/虚拟信用卡等。
    3. 高度可定制: 可自定义生成规则和数据结构。
    4. 测试友好: 避免使用真实数据导致隐私问题。

    适用场景:数据库填充、前端开发模拟数据、自动化测试、教学演示


    示例 1:生成中文假数据

    from faker import Faker
    
    # 创建中文假数据生成器
    fake = Faker('zh_CN')
    
    # 生成5条虚拟用户信息
    for _ in range(5):
        print(f"姓名: {fake.name()}")
        print(f"地址: {fake.address()}")
        print(f"手机号: {fake.phone_number()}")
        print(f"信用卡: {fake.credit_card_full()}")
        print("-" * 30)
    

    输出示例:

    姓名: 王静
    地址: 广东省深圳市龙华区民治街道518号
    手机号: 13559871234
    信用卡: Visa, 4929 1212 1222 1432, 王静, 08/29, CVC: 123
    ------------------------------
    姓名: 张伟
    地址: 北京市海淀区中关村南大街5号
    手机号: 18812345678
    信用卡: Mastercard, 5100 3412 3456 7890, 张伟, 05/27, CVC: 456
    

    示例 2:生成结构化测试数据(JSON格式)

    import json
    from faker import Faker
    
    fake = Faker()
    
    # 生成100条虚拟订单数据
    orders = []
    for _ in range(100):
        orders.append({
            "order_id": fake.uuid4(),
            "customer": fake.name(),
            "product": fake.word(ext_word_list=["手机", "笔记本", "耳机", "充电宝"]),
            "price": fake.pyfloat(left_digits=3, right_digits=2, positive=True),
            "date": fake.date_between(start_date="-1y").isoformat()
        })
    
    # 保存为JSON文件
    with open("test_orders.json", "w", encoding='utf-8') as f:
        json.dump(orders, f, ensure_ascii=False, indent=2)
    
    print("已生成测试数据文件: test_orders.json")
    

    生成的JSON片段:

    [
      {
        "order_id": "5b2f4c7a-9d1e-4a3b-b5f6-7c8d9e0f1a2b",
        "customer": "李娜",
        "product": "耳机",
        "price": 456.99,
        "date": "2023-05-17"
      }
    ]
    

    4. pytest

    pytest 是 Python 的 单元测试框架,核心功能包括:

    1. 自动化测试发现:自动查找 test_*.py 文件和 Test*
    2. 简洁断言语法: 用 assert 直接验证结果(无需记忆 self.assertEqual 等方法)
    3. 丰富插件生态:支持覆盖率报告、并行测试、参数化测试等
    4. Fixtures 依赖注入: 复用测试资源(如数据库连接)

    特点:

  • 比标准库 unittest 代码量减少 50%
  • 被 NumPy、pandas 等知名项目采用

  • 示例 1:基础测试(函数测试)

    被测代码 math_ops.py

    def add(a, b):
        return a + b
    
    def divide(a, b):
        if b == 0:
            raise ValueError("除数不能为0")
        return a / b
    

    测试代码 test_math.py

    import pytest
    from math_ops import add, divide
    
    def test_add():
        assert add(2, 3) == 5  # 直接使用assert
        assert add(-1, 1) == 0
    
    def test_divide():
        assert divide(6, 3) == 2.0
        with pytest.raises(ValueError, match="除数不能为0"):  # 验证异常
            divide(1, 0)
    

    运行测试

    pytest -v test_math.py
    

    输出:

    ============================= test session starts =============================
    test_math.py::test_add PASSED                                            [ 50%]
    test_math.py::test_divide PASSED                                         [100%]
    ============================== 2 passed in 0.01s ==============================
    

    示例 2:高级用法(Fixtures + 参数化)

    被测代码 user.py

    class User:
        def __init__(self, name):
            self.name = name
        
        def get_title(self):
            return f"User: {self.name}"
    

    测试代码 test_user.py

    import pytest
    
    @pytest.fixture
    def sample_user():
        """提供测试用的用户实例"""
        return User("Alice")
    
    @pytest.mark.parametrize("name, expected", [
        ("Alice", "User: Alice"),  # 测试用例1
        ("Bob",   "User: Bob"),    # 测试用例2
        ("",      "User: "),       # 边界条件
    ])
    def test_get_title(name, expected):
        assert User(name).get_title() == expected
    
    def test_fixture_usage(sample_user):
        assert "Alice" in sample_user.get_title()
    

    运行测试

    pytest -v test_user.py
    

    输出:

    ============================= test session starts =============================
    test_user.py::test_get_title[Alice-User: Alice] PASSED                   [ 25%]
    test_user.py::test_get_title[Bob-User: Bob] PASSED                       [ 50%]
    test_user.py::test_get_title[-User: ] PASSED                             [ 75%]
    test_user.py::test_fixture_usage PASSED                                  [100%]
    ============================== 4 passed in 0.02s ==============================
    

    总结

    依赖注入: 复用测试资源(如数据库连接)

    特点:

  • 比标准库 unittest 代码量减少 50%
  • 被 NumPy、pandas 等知名项目采用

  • 示例 1:基础测试(函数测试)

    被测代码 math_ops.py

    def add(a, b):
        return a + b
    
    def divide(a, b):
        if b == 0:
            raise ValueError("除数不能为0")
        return a / b
    

    测试代码 test_math.py

    import pytest
    from math_ops import add, divide
    
    def test_add():
        assert add(2, 3) == 5  # 直接使用assert
        assert add(-1, 1) == 0
    
    def test_divide():
        assert divide(6, 3) == 2.0
        with pytest.raises(ValueError, match="除数不能为0"):  # 验证异常
            divide(1, 0)
    

    运行测试

    pytest -v test_math.py
    

    输出:

    ============================= test session starts =============================
    test_math.py::test_add PASSED                                            [ 50%]
    test_math.py::test_divide PASSED                                         [100%]
    ============================== 2 passed in 0.01s ==============================
    

    示例 2:高级用法(Fixtures + 参数化)

    被测代码 user.py

    class User:
        def __init__(self, name):
            self.name = name
        
        def get_title(self):
            return f"User: {self.name}"
    

    测试代码 test_user.py

    import pytest
    
    @pytest.fixture
    def sample_user():
        """提供测试用的用户实例"""
        return User("Alice")
    
    @pytest.mark.parametrize("name, expected", [
        ("Alice", "User: Alice"),  # 测试用例1
        ("Bob",   "User: Bob"),    # 测试用例2
        ("",      "User: "),       # 边界条件
    ])
    def test_get_title(name, expected):
        assert User(name).get_title() == expected
    
    def test_fixture_usage(sample_user):
        assert "Alice" in sample_user.get_title()
    

    运行测试

    pytest -v test_user.py
    

    输出:

    ============================= test session starts =============================
    test_user.py::test_get_title[Alice-User: Alice] PASSED                   [ 25%]
    test_user.py::test_get_title[Bob-User: Bob] PASSED                       [ 50%]
    test_user.py::test_get_title[-User: ] PASSED                             [ 75%]
    test_user.py::test_fixture_usage PASSED                                  [100%]
    ============================== 4 passed in 0.02s ==============================
    

    总结

    掌握 Python 库是学习从入门到精通的核心步骤,通过复用成熟工具快速实现复杂功能,避免重复造轮子,显著提升开发效率与代码质量,让我们能够专注于业务逻辑而非底层实现

    作者:字节客栈

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python编程必备库:掌握这些提升技能水平

    发表回复