← 返回 Day 15 正文

Day 15 · 图解

Python 工具箱 — 架构与流程示意图

1️⃣ 工具包整体架构

graph TB subgraph "用户接口层" CLI["命令行入口 main.py\nargparse 解析"] MENU["交互式菜单\ninteractive()"] end subgraph "核心功能层" FT[file_tools.py\n文件管理工具] TT[text_tools.py\n文本处理工具] ST[stats_tools.py\n数据统计工具] end subgraph "基础设施层" INIT["__init__.py\nAPI 统一暴露"] ERR["异常处理\n自定义异常类"] end CLI --> FT CLI --> TT CLI --> ST MENU --> FT MENU --> TT MENU --> ST FT --> INIT TT --> INIT ST --> INIT INIT --> ERR
graph TB
    subgraph "用户接口层"
        CLI["命令行入口 main.py\nargparse 解析"]
        MENU["交互式菜单\ninteractive()"]
    end

    subgraph "核心功能层"
        FT[file_tools.py\n文件管理工具]
        TT[text_tools.py\n文本处理工具]
        ST[stats_tools.py\n数据统计工具]
    end

    subgraph "基础设施层"
        INIT["__init__.py\nAPI 统一暴露"]
        ERR["异常处理\n自定义异常类"]
    end

    CLI --> FT
    CLI --> TT
    CLI --> ST
    MENU --> FT
    MENU --> TT
    MENU --> ST
    FT --> INIT
    TT --> INIT
    ST --> INIT
    INIT --> ERR

2️⃣ 文件管理工具 — 工作流

flowchart LR subgraph "输入" DIR[目标目录路径] OP[操作参数\nprefix/suffix/replace/ext] end subgraph "处理流程" SCAN[扫描目录\nos.listdir/glob] FILTER[过滤文件\n按扩展名/大小/日期] PLAN[生成操作计划\n新旧名称映射] EXEC[执行操作\nos.rename/shutil.move] LOG[记录结果\n成功/失败/跳过] end subgraph "输出" REPORT[操作报告\n统计信息] end DIR --> SCAN OP --> FILTER SCAN --> FILTER FILTER --> PLAN PLAN --> EXEC EXEC --> LOG LOG --> REPORT
flowchart LR
    subgraph "输入"
        DIR[目标目录路径]
        OP[操作参数\nprefix/suffix/replace/ext]
    end

    subgraph "处理流程"
        SCAN[扫描目录\nos.listdir/glob]
        FILTER[过滤文件\n按扩展名/大小/日期]
        PLAN[生成操作计划\n新旧名称映射]
        EXEC[执行操作\nos.rename/shutil.move]
        LOG[记录结果\n成功/失败/跳过]
    end

    subgraph "输出"
        REPORT[操作报告\n统计信息]
    end

    DIR --> SCAN
    OP --> FILTER
    SCAN --> FILTER
    FILTER --> PLAN
    PLAN --> EXEC
    EXEC --> LOG
    LOG --> REPORT

file_tools 函数关系图

┌─────────────────────────────────────────────────────────────────────┐
│                         file_tools.py                               │
│                                                                     │
│  batch_rename(path, prefix, suffix, replace, ext, start)            │
│    ├─ 收集匹配文件列表                                               │
│    ├─ 生成新名称(前缀 + 原名 / 原名 + 后缀 / 替换 / 序号)        │
│    └─ os.rename() 执行重命名                                       │
│                                                                     │
│  find_files(path, ext, min_size, max_size, date_from, date_to)     │
│    ├─ os.walk() 递归遍历                                           │
│    ├─ 按扩展名过滤 → 大小过滤 → 日期过滤                            │
│    └─ 返回匹配文件列表 + 统计信息                                   │
│                                                                     │
│  dir_size_stats(path)                                               │
│    ├─ 递归计算总大小                                                 │
│    ├─ 按子目录汇总大小                                               │
│    └─ 返回结构化大小报告                                             │
│                                                                     │
│  classify_files(path, by_extension)                                 │
│    ├─ 按扩展名分组                                                   │
│    ├─ 创建分类目录(图片/文档/音频/视频/压缩包/其他)              │
│    └─ shutil.move() 移动文件                                        │
└─────────────────────────────────────────────────────────────────────┘

3️⃣ 文本处理工具 — 处理管线

flowchart TD subgraph "输入源" TXT[纯文本文件] CSV[CSV 文件] end subgraph "文本处理管线" READ[读取文件] TOKEN[分词 / 按行解析] PROCESS{处理类型} end subgraph "词频统计" CLEAN[清理标点符号] LOWERCASE[统一小写化] SW[排除停用词] COUNT[Counter 计数] end subgraph "CSV 分析" PARSE[csv.DictReader 解析] COL[提取目标列] STAT[统计类型推断] end subgraph "文本搜索" MATCH{匹配模式} PLAIN["普通匹配\ntext in line"] REGEX["正则匹配\nre.search/compile"] end subgraph "格式转换" CASE[大小写转换] LINE[换行符转换] ENC[编码转换] end subgraph "输出" RES[分析结果 / 字典 / 报告] end TXT --> READ CSV --> READ READ --> TOKEN TOKEN --> PROCESS PROCESS -->|词频统计| CLEAN CLEAN --> LOWERCASE LOWERCASE --> SW SW --> COUNT PROCESS -->|CSV 分析| PARSE PARSE --> COL COL --> STAT PROCESS -->|文本搜索| MATCH MATCH -->|普通| PLAIN MATCH -->|正则| REGEX PROCESS -->|格式转换| CASE PROCESS -->|格式转换| LINE PROCESS -->|格式转换| ENC COUNT --> RES STAT --> RES PLAIN --> RES REGEX --> RES CASE --> RES LINE --> RES ENC --> RES
flowchart TD
    subgraph "输入源"
        TXT[纯文本文件]
        CSV[CSV 文件]
    end

    subgraph "文本处理管线"
        READ[读取文件]
        TOKEN[分词 / 按行解析]
        PROCESS{处理类型}
    end

    subgraph "词频统计"
        CLEAN[清理标点符号]
        LOWERCASE[统一小写化]
        SW[排除停用词]
        COUNT[Counter 计数]
    end

    subgraph "CSV 分析"
        PARSE[csv.DictReader 解析]
        COL[提取目标列]
        STAT[统计类型推断]
    end

    subgraph "文本搜索"
        MATCH{匹配模式}
        PLAIN["普通匹配\ntext in line"]
        REGEX["正则匹配\nre.search/compile"]
    end

    subgraph "格式转换"
        CASE[大小写转换]
        LINE[换行符转换]
        ENC[编码转换]
    end

    subgraph "输出"
        RES[分析结果 / 字典 / 报告]
    end

    TXT --> READ
    CSV --> READ
    READ --> TOKEN
    TOKEN --> PROCESS

    PROCESS -->|词频统计| CLEAN
    CLEAN --> LOWERCASE
    LOWERCASE --> SW
    SW --> COUNT

    PROCESS -->|CSV 分析| PARSE
    PARSE --> COL
    COL --> STAT

    PROCESS -->|文本搜索| MATCH
    MATCH -->|普通| PLAIN
    MATCH -->|正则| REGEX

    PROCESS -->|格式转换| CASE
    PROCESS -->|格式转换| LINE
    PROCESS -->|格式转换| ENC

    COUNT --> RES
    STAT --> RES
    PLAIN --> RES
    REGEX --> RES
    CASE --> RES
    LINE --> RES
    ENC --> RES

text_tools 函数关系图

┌─────────────────────────────────────────────────────────────────────┐
│                         text_tools.py                               │
│                                                                     │
│  word_frequency(text, ignore_stopwords, top_n)                      │
│    ├─ 加载文件或字符串输入                                           │
│    ├─ 预处理:去标点 → 小写 → 分词                                  │
│    ├─ 排除停用词(可选)                                             │
│    └─ collections.Counter 统计 → 返回 Top-N 结果                   │
│                                                                     │
│  analyze_csv(filepath, column, delimiter)                            │
│    ├─ csv.DictReader 读取                                            │
│    ├─ 检测列数据类型(数字/字符串)                                  │
│    ├─ 统计:行数 / 唯一值 / 缺失值 / 均值(数字列)                 │
│    └─ 返回分析报告字典                                               │
│                                                                     │
│  search_text(filepath, pattern, use_regex, case_sensitive)          │
│    ├─ 逐行读取                                                       │
│    ├─ 普通匹配 (in 运算符) 或正则匹配 (re.search)                   │
│    ├─ 返回匹配行号 + 内容                                            │
│    └─ 支持大小写不敏感选项                                           │
│                                                                     │
│  convert_text(filepath, to_case, newline, encoding)                  │
│    ├─ 读取文件内容                                                   │
│    ├─ 大小写转换 (upper/lower/title)                                 │
│    ├─ 换行符转换 (\\n / \\r\\n / \\r)                                │
│    ├─ 编码转换 (utf-8/latin-1/gbk 等)                               │
│    └─ 写入新文件或原地替换                                           │
└─────────────────────────────────────────────────────────────────────┘

4️⃣ 数据统计流程

flowchart LR subgraph "输入数据" RAW[原始数据列表\nlist[float/int]] end subgraph "数据清洗" CLEAN[过滤 None/NaN] VALIDATE[类型检查] end subgraph "统计计算" CT["集中趋势\n均值 / 中位数 / 众数"] DISP["离散程度\n方差 / 标准差"] FREQ["分布\n频数统计 / 分箱"] SORT["排序\n升序 / 去重"] PCT["分位数\n任意百分比"] end subgraph "输出" REPORT2["综合报告\nsummary_report()"] CHART["字符直方图\nvisual_histogram()"] end RAW --> CLEAN CLEAN --> VALIDATE VALIDATE --> CT VALIDATE --> DISP VALIDATE --> FREQ VALIDATE --> SORT VALIDATE --> PCT CT --> REPORT2 DISP --> REPORT2 FREQ --> REPORT2 SORT --> REPORT2 PCT --> REPORT2 FREQ --> CHART
flowchart LR
    subgraph "输入数据"
        RAW[原始数据列表\nlist[float/int]]
    end

    subgraph "数据清洗"
        CLEAN[过滤 None/NaN]
        VALIDATE[类型检查]
    end

    subgraph "统计计算"
        CT["集中趋势\n均值 / 中位数 / 众数"]
        DISP["离散程度\n方差 / 标准差"]
        FREQ["分布\n频数统计 / 分箱"]
        SORT["排序\n升序 / 去重"]
        PCT["分位数\n任意百分比"]
    end

    subgraph "输出"
        REPORT2["综合报告\nsummary_report()"]
        CHART["字符直方图\nvisual_histogram()"]
    end

    RAW --> CLEAN
    CLEAN --> VALIDATE
    VALIDATE --> CT
    VALIDATE --> DISP
    VALIDATE --> FREQ
    VALIDATE --> SORT
    VALIDATE --> PCT
    CT --> REPORT2
    DISP --> REPORT2
    FREQ --> REPORT2
    SORT --> REPORT2
    PCT --> REPORT2
    FREQ --> CHART

stats_tools 函数关系图

┌─────────────────────────────────────────────────────────────────────┐
│                        stats_tools.py                               │
│                                                                     │
│  基础统计函数                                                       │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │ mean(data)       → 算术平均值                                │  │
│  │ median(data)     → 中位数(奇数取中间,偶数取平均)         │  │
│  │ mode(data)       → 众数(支持多个众数)                     │  │
│  │ variance(data, sample) → 方差(样本/总体)                  │  │
│  │ std_dev(data, sample)  → 标准差(样本/总体)                │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                                                                     │
│  进阶统计函数                                                       │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │ frequency_distribution(data, bins) → 直方图分箱统计         │  │
│  │ sort_and_dedup(data) → 排序并去重,返回统计信息             │  │
│  │ percentiles(data, percents) → 计算任意分位数                 │  │
│  │ visual_histogram(data, bins) → 终端字符直方图               │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                                                                     │
│  综合报告函数                                                       │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │ summary_report(data) → 一键生成统计分析报告 (dict)          │  │
│  │   ├─ 样本量 | 均值 | 中位数 | 众数                          │  │
│  │   ├─ 方差 | 标准差 | 最小值 | 最大值                        │  │
│  │   ├─ 极差 | Q1 | Q3 | IQR                                   │  │
│  │   └─ 分布: 分箱频数表                                        │  │
│  └──────────────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────────────┘

5️⃣ main.py 命令行流程

stateDiagram-v2 [*] --> 入口判断 入口判断 --> 命令行模式: 有子命令参数 入口判断 --> 交互菜单: 无参数 / --interactive 命令行模式 --> file子命令: python main.py file ... 命令行模式 --> text子命令: python main.py text ... 命令行模式 --> stats子命令: python main.py stats ... file子命令 --> batch_rename file子命令 --> find file子命令 --> size file子命令 --> classify batch_rename --> 输出结果 find --> 输出结果 size --> 输出结果 classify --> 输出结果 text子命令 --> wordfreq text子命令 --> csv_analyze text子命令 --> search text子命令 --> convert wordfreq --> 输出结果 csv_analyze --> 输出结果 search --> 输出结果 convert --> 输出结果 stats子命令 --> analyze stats子命令 --> histogram stats子命令 --> report analyze --> 输出结果 histogram --> 输出结果 report --> 输出结果 交互菜单 --> 显示菜单选项 显示菜单选项 --> 用户选择功能 用户选择功能 --> 调用对应模块 调用对应模块 --> 显示菜单选项: 继续使用 用户选择功能 --> [*]: 退出
stateDiagram-v2
    [*] --> 入口判断

    入口判断 --> 命令行模式: 有子命令参数
    入口判断 --> 交互菜单: 无参数 / --interactive

    命令行模式 --> file子命令: python main.py file ...
    命令行模式 --> text子命令: python main.py text ...
    命令行模式 --> stats子命令: python main.py stats ...

    file子命令 --> batch_rename
    file子命令 --> find
    file子命令 --> size
    file子命令 --> classify
    batch_rename --> 输出结果
    find --> 输出结果
    size --> 输出结果
    classify --> 输出结果

    text子命令 --> wordfreq
    text子命令 --> csv_analyze
    text子命令 --> search
    text子命令 --> convert
    wordfreq --> 输出结果
    csv_analyze --> 输出结果
    search --> 输出结果
    convert --> 输出结果

    stats子命令 --> analyze
    stats子命令 --> histogram
    stats子命令 --> report
    analyze --> 输出结果
    histogram --> 输出结果
    report --> 输出结果

    交互菜单 --> 显示菜单选项
    显示菜单选项 --> 用户选择功能
    用户选择功能 --> 调用对应模块
    调用对应模块 --> 显示菜单选项: 继续使用
    用户选择功能 --> [*]: 退出