← 返回 Day 15 正文

Day 15 · 练习与清单

Python 工具箱 — 完成清单与练习题

✅ 完成清单

项目结构

文件管理工具 (file_tools.py)

文本处理工具 (text_tools.py)

数据统计工具 (stats_tools.py)

主程序 (main.py)

代码质量


📝 扩展练习题

练习 1:给文件工具添加撤销功能

难度:⭐⭐⭐

为 file_tools.py 添加操作日志和撤销功能。

要求: 1. 在执行 batch_rename() 和 classify_files() 前,自动记录操作前的文件状态 2. 创建一个 OperationLog 类,记录每次操作的变化 3. 实现 undo_last_operation() 函数,撤销最后一次操作 4. 日志保存为 JSON 文件(如 .pytools_undo_log.json)

提示: - 在执行重命名前,记录 (原名, 新名) 映射 - 撤销时反转这个映射 - 注意撤销操作的顺序(后执行的先撤销)

示例:

python
from pytools.file_tools import batch_rename, undo_last_operation

# 执行重命名
batch_rename("/tmp/files", prefix="new_", ext=".txt")
# 后悔了,撤销
undo_last_operation("/tmp/files")

练习 2:给文本工具添加敏感词过滤

难度:⭐⭐

为 text_tools.py 添加敏感词过滤功能。

要求: 1. 实现 filter_sensitive_words(text, word_list, replacement="***") 函数 2. 支持从文件加载敏感词列表 3. 大小写不敏感匹配 4. 支持中文敏感词

扩展思考: - 如何防止绕过(如 "敏-感-词" 中间加符号)? - 如何实现分级过滤(警告 vs 阻止)? - 如何处理长文本的性能?

示例:

python
from pytools.text_tools import filter_sensitive_words

text = "This is a badword in this sentence."
result = filter_sensitive_words(text, ["badword"], replacement="[FILTERED]")
print(result)  # "This is a [FILTERED] in this sentence."

练习 3:用 stats_tools 分析成绩单 CSV

难度:⭐⭐

使用 stats_tools.py 的成绩单分析脚本。

要求: 1. 创建一个学生成绩 CSV 文件(包含姓名、语文、数学、英语、总分列) 2. 读取 CSV 并对每科成绩进行统计 3. 输出每科的均值、中位数、标准差、最高分、最低分 4. 找出总分前 3 名和后 3 名的学生

示例 CSV (scores.csv):

csv
姓名,语文,数学,英语
张三,85,92,78
李四,90,88,95
王五,78,85,82
...

输出示例:

=== 成绩分析报告 ===
科目: 语文
  均值: 83.5
  中位数: 84.0
  标准差: 7.2
  最高分: 98
  最低分: 62

总分排名:
  🥇 李四 - 273 分
  🥈 赵六 - 265 分
  🥉 张三 - 255 分
...

练习 4:实现一个 JSON 配置文件系统

难度:⭐⭐⭐

为 pytools 添加配置文件支持。

要求: 1. 创建一个 config.py 模块 2. 支持从 YAML 或 JSON 文件加载配置 3. 配置项包括: - 停用词文件路径 - 文件分类映射表(可自定义) - 默认统计参数(如分箱数量) - 日志级别和输出格式 4. 各工具模块使用配置中的默认值

示例配置 (pytools_config.json):

json
{
    "text_tools": {
        "stopwords_file": "~/.pytools/stopwords.txt",
        "default_top_n": 30
    },
    "file_tools": {
        "custom_categories": {
            ".md": "docs",
            ".rst": "docs"
        }
    },
    "stats_tools": {
        "default_bins": 15
    }
}

练习 5:终极挑战 — 为工具箱添加 GUI 界面

难度:⭐⭐⭐⭐⭐

使用 Python 标准库 tkinter 为工具箱添加图形界面。 如果你熟悉 PyQt5 或 Dear PyGui 也可以使用。

要求(基础级): 1. 主窗口包含三个选项卡(文件管理、文本处理、数据统计) 2. 每个选项卡对应一个功能模块 3. 文件管理:目录选择 + 操作参数输入 + 结果展示 4. 文本处理:文件选择 + 操作选择 + 结果预览 5. 数据统计:数据输入 + 统计结果显示

要求(进阶级): 1. 文件拖放支持 2. 实时预览重命名结果 3. 词频统计结果以柱状图显示 4. 进度条显示长操作进度 5. 支持多线程(避免界面卡死)

提示:

python
# 基础 tkinter 框架
import tkinter as tk
from tkinter import ttk, filedialog, messagebox

class PytoolsGUI:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title("Python 工具箱")
        self.root.geometry("800x600")
        # ... 构建 UI

    def run(self):
        self.root.mainloop()

if __name__ == "__main__":
    app = PytoolsGUI()
    app.run()

💪 自我挑战

完成以上 5 道练习题后,试着把这些功能集成到 main.py 中, 让用户可以通过交互菜单选择使用这些扩展功能。

复习至此,你应该已经掌握了 Python 的基础语法和核心数据结构, 可以自信地说:「我了解 Python 基础了!」🚀

接下来进入 Phase 2:面向对象编程!