John-Z-byte/file_classifier

GitHub: John-Z-byte/file_classifier

基于Schema哈希而非文件名对XLSX和CSV电子表格进行确定性分类的数据工程工具。

Stars: 0 | Forks: 0

# file_classifier ## 基于 Schema 的 XLSX 和 CSV 文件分类器 本项目根据**检测到的 schema(表头)**而非文件名或文件夹结构对杂乱的电子表格文件进行分类。它专为需要**可审计性、可复现性以及对数据含义的明确控制**的数据工程工作流而设计。 ## 问题陈述 ### 电子表格数据管道不一致性的解决方案 基于电子表格的数据管道常因以下原因失败: - 文件名不一致或具有误导性 - 文件夹结构随时间变化 - 同一数据集被重复导出且名称不同 - 新的文件变体悄然出现并破坏下游逻辑 本项目通过将文件的 **schema 视为其真实身份**来解决这些问题。 ## 核心原则 - 表头定义含义 - 格式不定义 - 文件名会撒谎 文件**仅**根据其包含的**经过标准化的表头**的确切集合进行分类。 ## 关键特性 - 使用表头启发式方法进行 Schema 检测 - 通过哈希生成稳定的 Schema 标识 - 手动语义标记(无自动映射) - 显式处理未知 Schema - 基于快照的最终输出(无累积) - 以 Parquet 格式存储的完整审计追踪 - 基于预览的快速处理 - 支持 XLSX 和 CSV 格式 ## 高层架构 管道包含四个主要阶段: - **`datalake/`** 原始输入文件(只读源) - **`pipeline`** Schema 检测、标准化和哈希逻辑 - **`data/staging/`** 以 Parquet 持久化的审计和元数据存储(**真实层**) - **`data/classified/`** 按 Schema 标签组织的基于快照的最终输出 ## 文件夹结构 ``` file_classifier/ ├── datalake/ # Raw input files (gitignored) ├── data/ │ ├── staging/ # Audit & metadata (Parquet) │ ├── classified/ # Snapshot gold output │ └── quarantine/ # Unreadable / low-confidence files ├── src/ # Pipeline source code ├── config/ # Runtime configuration └── README.md ``` ## 未知 Schema 处理 未知 Schema **绝不会被静默处理**: - 文件被复制到 `classified/unknown_schema/` - CLI 中会打印缺失的 Schema 哈希 - 用户必须显式标记 Schema 才能对其进行分类 ## 设计保证 - 相同的表头始终生成相同的 Schema 哈希 - 表头顺序无关紧要 - 文件名不影响分类 - 未知 Schema 总是会被暴露 - Staging 是唯一的真实来源 ## 如何运行 ``` python -m src.main ```
标签:CSV处理, ETL, Gradle集成, JavaCC, Parquet, Python, XLSX解析, 元数据管理, 哈希算法, 审计追踪, 数据工程, 数据清洗, 数据湖, 数据管道, 数据血缘, 数据质量, 文件分类, 无后门, 格式标准化, 模式识别, 电子表格分类器, 电子表格处理, 确定性计算, 表头检测, 软件工程, 逆向工具, 非结构化数据处理