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解析, 元数据管理, 哈希算法, 审计追踪, 数据工程, 数据清洗, 数据湖, 数据管道, 数据血缘, 数据质量, 文件分类, 无后门, 格式标准化, 模式识别, 电子表格分类器, 电子表格处理, 确定性计算, 表头检测, 软件工程, 逆向工具, 非结构化数据处理