> ## Documentation Index
> Fetch the complete documentation index at: https://docs.akria.net/llms.txt
> Use this file to discover all available pages before exploring further.

# Day 14 | 第二阶段复盘

> Python 基础与自动化阶段总结

<Info>
  **复盘日**：恭喜你完成了第二周的学习！今天是巩固和总结的日子。我们将回顾过去 6 天学到的所有 Python 知识，整理成速查表，并记录遇到的问题和解决方案。今天不只是复习，而是要彻底理解 **"如何将 Python 知识应用到实际运维场景"**、**"如何设计可维护的 Python 脚本"** 以及 **"如何为下一阶段的 FastAPI 学习做好准备"**。
</Info>

## <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}><Icon icon="clipboard-check" size={26} color="#059669" /> 复盘内容 | Review</span>

<AccordionGroup>
  <Accordion title="Python 核心点回顾" icon="code">
    **Day 08 - 基础补漏**：

    * 虚拟环境：`python3 -m venv .venv`、`source .venv/bin/activate`
    * 依赖管理：`pip install package`、`pip freeze > requirements.txt`
    * 类型注解：`def func(param: type) -> return_type:`
    * f-string：`f"Hello {name}"`（推荐使用）
    * 上下文管理器：`with open()` 自动关闭文件
    * 列表推导式：`[x for x in list if condition]`

    **Day 09 - 数据结构与装饰器**：

    * 字典操作：`get()`、`setdefault()`、`update()`
    * 字典推导式：`{k: v for k, v in data}`
    * 装饰器：`@decorator` 扩展函数功能
    * 异常处理：`try-except-finally`、不要写裸露的 `except:`
    * 上下文管理器：`@contextmanager` 自动资源管理

    **Day 10 - 文件处理与正则**：

    * JSON：`json.load()`、`json.dump()`、`json.loads()`、`json.dumps()`
    * YAML：`yaml.safe_load()`、`yaml.dump()`（需要安装 PyYAML）
    * 正则表达式：`re.search()`、`re.findall()`、`re.sub()`
    * 常用模式：`\d+`（数字）、`\w+`（单词）、`.*?`（非贪婪匹配）

    **Day 11 - subprocess 模块**：

    * `subprocess.run()`：执行命令并等待完成
    * 参数：`capture_output=True`、`text=True`、`check=True`、`timeout=秒数`
    * 安全规范：使用列表传参，避免 Shell 注入
    * `subprocess.Popen()`：实时处理输出（高级用法）

    **Day 12 - 数据库操作**：

    * PyMySQL：轻量级 MySQL 客户端
    * 连接管理：使用上下文管理器确保连接关闭
    * 参数化查询：`cursor.execute(sql, (param,))` 防止 SQL 注入
    * 事务控制：`commit()` 提交、`rollback()` 回滚

    **Day 13 - 综合实战**：

    * 项目整合：文件处理 + 正则 + subprocess + 数据库
    * 模块化设计：功能拆分成独立函数
    * 配置管理：集中管理配置
    * 错误处理：完善的异常处理机制
  </Accordion>
</AccordionGroup>

***

## <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}><Icon icon="clipboard-check" size={26} color="#059669" /> 复盘产出 | Output</span>

### 1. 第二阶段速查表

<CardGroup cols={2}>
  <Card title="Python 环境管理" icon="box">
    ```bash theme={null}
    # 创建虚拟环境
    python3 -m venv .venv
    source .venv/bin/activate

    # 依赖管理
    pip install package
    pip freeze > requirements.txt
    pip install -r requirements.txt
    ```
  </Card>

  <Card title="文件处理" icon="file">
    ```python theme={null}
    # JSON
    import json
    data = json.load(open("file.json"))
    json.dump(data, open("file.json", "w"), indent=4)

    # YAML
    import yaml
    data = yaml.safe_load(open("file.yaml"))
    ```
  </Card>

  <Card title="正则表达式" icon="code">
    ```python theme={null}
    import re
    match = re.search(r'pattern', text)
    results = re.findall(r'pattern', text)
    new_text = re.sub(r'pattern', 'replacement', text)
    ```
  </Card>

  <Card title="subprocess" icon="terminal">
    ```python theme={null}
    import subprocess
    result = subprocess.run(
        ["cmd", "arg"],
        capture_output=True,
        text=True,
        check=True
    )
    print(result.stdout)
    ```
  </Card>

  <Card title="数据库操作" icon="database">
    ```python theme={null}
    import pymysql
    conn = pymysql.connect(**config)
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM table WHERE id=%s", (1,))
    result = cursor.fetchone()
    conn.commit()
    conn.close()
    ```
  </Card>

  <Card title="装饰器" icon="magic">
    ```python theme={null}
    from functools import wraps

    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            # 前置处理
            result = func(*args, **kwargs)
            # 后置处理
            return result
        return wrapper
    ```
  </Card>
</CardGroup>

### 2. 常见问题与解决方案

<AccordionGroup>
  <Accordion title="虚拟环境问题">
    **问题**：`python3: command not found`

    **解决方案**：

    * macOS：`brew install python3`
    * Linux：`sudo apt install python3 python3-pip python3-venv`
    * Windows：使用 WSL 或安装 Python 官方版本

    **问题**：激活虚拟环境后，`which python` 还是系统路径

    **解决方案**：检查 `.venv/bin/activate` 文件是否存在，重新创建虚拟环境
  </Accordion>

  <Accordion title="文件处理问题">
    **问题**：`UnicodeDecodeError` 读取文件时编码错误

    **解决方案**：指定编码 `open("file.txt", "r", encoding="utf-8")`

    **问题**：YAML 文件解析失败

    **解决方案**：确保安装了 PyYAML：`pip install pyyaml`，使用 `yaml.safe_load()` 而不是 `yaml.load()`
  </Accordion>

  <Accordion title="subprocess 问题">
    **问题**：`FileNotFoundError` 命令不存在

    **解决方案**：检查命令路径，使用完整路径或确保命令在 PATH 中

    **问题**：命令执行超时

    **解决方案**：增加 `timeout` 参数或优化命令逻辑
  </Accordion>

  <Accordion title="数据库问题">
    **问题**：`pymysql.err.OperationalError: (2003, "Can't connect to MySQL server")`

    **解决方案**：

    * 检查 MySQL 服务是否运行
    * 检查连接配置（host、port、user、password）
    * 检查防火墙设置

    **问题**：连接泄漏

    **解决方案**：始终使用上下文管理器 `with db_cursor() as cursor:` 确保连接关闭
  </Accordion>
</AccordionGroup>

### 3. 项目重构示例

<AccordionGroup>
  <Accordion title="重构示例：Day 08 的语法复习脚本">
    **原始版本**：

    ```python theme={null}
    def calculate_memory(total, usage):
        return f"Usage: {usage / total:.2%}"
    ```

    **优化版本**（应用 Week 2 学到的知识）：

    ```python theme={null}
    from typing import Tuple

    def calculate_memory(total: int, usage: float) -> str:
        """
        计算内存使用率
        
        参数:
            total: 总内存（MB）
            usage: 已使用内存（MB）
        
        返回:
            格式化的使用率字符串
        """
        if total <= 0:
            raise ValueError("总内存必须大于 0")
        
        percentage = usage / total
        return f"Memory Usage: {percentage:.2%}"

    # 使用装饰器添加日志
    @log_execution
    def get_memory_info():
        total = 8192
        usage = 4096
        return calculate_memory(total, usage)
    ```

    **改进点**：

    * 添加了类型注解，提高代码可读性
    * 添加了文档字符串，说明函数用途
    * 添加了参数验证，提高健壮性
    * 使用装饰器扩展功能
  </Accordion>
</AccordionGroup>

***

## 🏆 阶段性总结

恭喜你！你已经完成了 **Project Team** 基础训练营的第二阶段。

<Info>
  **到这里你已经掌握了：**

  * ✅ Python 虚拟环境和依赖管理
  * ✅ Python 核心语法（类型注解、f-string、列表推导式）
  * ✅ 数据结构操作（字典、列表推导式）
  * ✅ 装饰器和异常处理
  * ✅ 文件处理（JSON、YAML、CSV）
  * ✅ 正则表达式
  * ✅ subprocess 系统调用
  * ✅ PyMySQL 数据库操作
  * ✅ 综合项目开发能力

  **下一阶段（Week 3）将学习：**

  * FastAPI 框架基础
  * RESTful API 设计
  * 数据库 ORM（SQLAlchemy）
  * API 文档自动生成
  * 中间件和依赖注入
</Info>

***

## <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}><Icon icon="lightbulb" size={26} color="#059669" /> 学习建议</span>

<CardGroup cols={2}>
  <Card title="巩固基础" icon="book">
    * 复习本周的所有代码示例
    * 完成所有拓展任务
    * 整理个人知识库和速查表
    * 记录遇到的问题和解决方案
  </Card>

  <Card title="实践项目" icon="code">
    * 尝试重构之前的 Shell 脚本为 Python
    * 开发自己的监控工具
    * 练习数据库操作和文件处理
    * 熟悉装饰器和异常处理
  </Card>
</CardGroup>

***

<CardGroup cols={2}>
  <Card title="上一天: 综合实战" href="/training/30daystudy/day-13">
    Day 13 | 第二阶段综合实战
  </Card>

  <Card title="下一周: FastAPI 框架" href="/training/30daystudy/week-3">
    第 03 周 | FastAPI 框架实战
  </Card>
</CardGroup>
