e-checker-v2
Installation
SKILL.md
E-Checker: Excel 表格数据检查技能
概览
本技能通过以下步骤系统化地检查 Excel 表格数据:
- 分析需求 — 从 checker-rule.md 文件或用户描述中提取检查规则
- 匹配现有脚本 — 检查
.e-checker/目录是否已有对应脚本 - 字段对齐验证 — 确认脚本中的字段引用与实际表格列名一致
- 执行并报告 — 运行脚本,生成结构化检查报告
★ 提示:如果需求来自文件,需逐行解析文件中的每一条规则并实现检查。
步骤 1: 分析需求
需求来源
需求可能来自两个渠道,按优先级:
- 规则文件 (
checker-rule.md) — 最常见的需求来源。该文件通常位于工作目录根路径,逐行列出检查需求。 - 用户描述 — 用户直接口头描述需要检查的内容。
操作方法
# 查找规则文件
find . -name "checker-rule.md" -maxdepth 2
# 读取规则文件
cat checker-rule.md
读取后,逐行解析每条规则,将其转化为具体的检查逻辑:
- 涉及哪个 Excel 文件?
- 涉及哪个 Sheet?
- 检查哪个/哪些列?
- 检查条件是什么(格式、范围、关联、唯一性等)?
将解析后的规则整理为清单,等待用户确认或直接进入下一步。
步骤 2: 检查现有脚本
所有 Python 检查脚本统一存储在 .e-checker/ 目录(工作目录下的隐藏文件夹)。
# 查看已有脚本
ls .e-checker/
# 查看脚本内容
cat .e-checker/<script_name>.py
匹配逻辑
将步骤 1 中解析的规则与已有脚本进行对照:
- 脚本是否覆盖了该规则?
- 脚本的检查逻辑是否正确表达了规则要求?
如果某个规则已有对应脚本,进入步骤 3 验证;如果没有,需要新建脚本。
步骤 3: 字段对齐验证
这是最容易出错的环节 — 脚本中硬编码的列名可能因 Excel 版本更新而失效。
操作方法
# 使用脚本快速查看 Excel 的 Sheet 和列名
python scripts/explorer.py <excel_path>
该脚本会输出所有 Sheet 名称及其列名。将其与检查脚本中引用的列名逐一对比,确保:
- 引用的 Sheet 存在
- 引用的列名拼写完全一致(包括大小写、空格)
- 没有遗漏新增的必要列
如果发现不匹配,必须先修复脚本再执行。
步骤 4: 执行脚本并生成报告
执行检查脚本
# 执行单个检查脚本
python .e-checker/<script_name>.py
# 执行全部检查脚本
python scripts/run_all.py
报告格式
每个检查脚本应输出结构化报告,格式如下:
====================================
检查报告: <脚本名称>
====================================
数据源: <Excel 文件路径>
Sheet: <Sheet 名称>
检查时间: <时间戳>
------------------------------------
总记录数: XXX
通过: XXX
失败: XXX
失败率: X.XX%
------------------------------------
失败详情:
行号 | 字段 | 期望值 | 实际值 | 原因
...
====================================
脚本应当:
- 使用
openpyxl读取.xlsx文件(保留格式信息) - 使用
pandas进行数据处理和批量检查 - 将检查结果同时打印到控制台和保存为
.e-checker/reports/下的报告文件
脚本编写规范
依赖
import openpyxl # 用于读取 Excel 文件结构和格式
import pandas as pd # 用于数据处理和检查逻辑
目录约定
.e-checker/
├── *.py # 检查脚本
├── reports/ # 检查报告输出
│ └── <script>_<timestamp>.txt
└── README.md # 脚本说明(可选)
脚本模板
每个检查脚本应遵循以下结构:
"""
检查描述: <一句话说明检查目的>
对应规则: <checker-rule.md 中的规则编号或描述>
"""
import pandas as pd
from pathlib import Path
from datetime import datetime
# === 配置 ===
EXCEL_PATH = Path("path/to/file.xlsx")
SHEET_NAME = "Sheet1"
REPORTS_DIR = Path(".e-checker/reports")
def check_<rule_name>(df: pd.DataFrame) -> list[dict]:
"""
执行具体的检查逻辑。
返回: 失败记录列表,每项包含行号、字段、期望值、实际值、原因
"""
failures = []
# 实现检查逻辑
return failures
def main():
REPORTS_DIR.mkdir(parents=True, exist_ok=True)
# 读取数据
df = pd.read_excel(EXCEL_PATH, sheet_name=SHEET_NAME, engine='openpyxl')
# 执行检查
failures = check_<rule_name>(df)
# 输出报告
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
report_path = REPORTS_DIR / f"<script>_{timestamp}.txt"
# ... 打印并保存报告
if __name__ == "__main__":
main()
工具脚本
scripts/explorer.py— 快速查看 Excel 文件的 Sheet 列表和列名,用于字段对齐scripts/run_all.py— 批量执行.e-checker/下所有检查脚本scripts/template.py— 新检查脚本的模板,可复制使用
常见检查类型参考
| 类型 | 说明 | 示例 |
|---|---|---|
| 列存在性 | 必需的列是否存在 | assert '主键字段' in df.columns |
| 非空检查 | 关键列不能为空/NaN | df[df['必填字段'].isna()] |
| 格式检查 | 值必须符合特定格式 | 编号、邮箱、日期格式 |
| 范围检查 | 数值在合理范围内 | 数量 >= 0, 比例 0-100 |
| 唯一性检查 | 列值不能重复 | df.duplicated(subset=['主键']) |
| 关联检查 | Sheet 间外键关系 | 子表的外键必须在父表中存在 |
| 一致性检查 | 多列之间的逻辑关系 | 起始值 <= 终止值 |
注意事项
- 字段名敏感性: Excel 列名可能有前导/尾随空格,读取时建议使用
.str.strip()清理 - 多 Sheet 关联: 跨 Sheet 检查时,分别读取后通过公共键关联
- 大数据量: 超过 10 万行时考虑使用
openpyxl的read_only=True模式 - 中文编码: 文件名和列名可能包含中文,确保路径处理使用
Path对象 - 规则文件优先: 当存在
checker-rule.md时,以文件中的规则为准,用户的口头描述作为补充
Related skills