Files
OnebotCatalog/onebot-data/tools/fix-clamp-meta-empty-enum.py
wangruiguo 0584ba67b4 v1.0: 夹紧缸模块真实数据替换 + 仓库瘦身
数据 (CLM 气动夹紧缸分类):
- 1 系列 demo -> 11 个官方系列, 6 型号 -> 859 个真实型号
- 参数化升级: 仅缸径 -> 最多 5 维 (缸径/臂位置/臂类型/臂样式/传感器)
- 11 系列各含官方图册附图 (84 张) + datasheet PDF
- 修复: 枚举维度空串必须为合法值 (否则级联过滤后下拉全空)
- 修复: catalog.json 分类 series 数组未更新导致新系列不进包
- 修复: _step 副本后缀归一化错误 (产生假型号)

工具:
- gen-clamp-series.py     数据清洗 (X盘数模 -> CSV/meta/STEP)
- copy-clamp-step.py      8线程并行复制 (网络盘 I/O 优化)
- gen-clamp-manual.py     官方图册 PDF -> 附图
- update-clamp-meta-attach.py / fix-clamp-meta-empty-enum.py

仓库瘦身:
- .gitignore 排除数模(5GB)/.opc(1.2GB)/编译产物/发布产物
- 移出索引: release/ bin产物 STEP数模 .opc 大型PDF 等
- 提交体积 17MB (原 15.97GB)

其他: SelfTest.cs 可解析选型逻辑放宽 (稀疏数据用真实变体回验)

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-14 15:24:16 +08:00

50 lines
1.9 KiB
Python

# -*- coding: utf-8 -*-
"""
修复已有 meta.json: 枚举维度的空串 '' 必须是合法值(参考 KC magnet values=['','M'])。
原因: DomainValid 要求 enum 值在 values 内, 数据里大量型号该维度为空 → 判非法
→ AllowedOptions 过滤后下拉全空 (用户反馈"只有 UCBP 能选, 其他都空")。
用法: PYTHONUTF8=1 python fix-clamp-meta-empty-enum.py
"""
import json, csv, os
CAT = r'D:/开发/OnebotCatalog/onebot-data/catalog'
SERIES = ['UCBP','UCBM','UCBT','UCBQ','UCBH','UCDP','UCIM','UCIP','UCNM','UCNP','UFL']
ENUM_CODES = ['pos', 'type', 'style', 'sensor']
DISPLAY_EMPTY = {
'pos': '不适用', 'type': '不适用', 'style': '不适用', 'sensor': '不适用',
}
for s in SERIES:
mp = os.path.join(CAT, 'series', s + '.meta.json')
with open(mp, encoding='utf-8') as f:
meta = json.load(f)
params = meta['series']['parameters']
changed = []
for p in params:
if p['code'] not in ENUM_CODES:
continue
vals = p['values']
if '' in vals:
continue
# 从 CSV 确认该维度是否真有空值
cp = os.path.join(CAT, 'csv', s + '.csv')
has_empty = False
with open(cp, encoding='utf-8-sig') as f:
for row in csv.DictReader(f):
if p['code'] in row and (row[p['code']] or '') == '':
has_empty = True
break
if not has_empty:
continue
p['values'] = [''] + vals
d = p.get('display') or {}
d[''] = DISPLAY_EMPTY.get(p['code'], '不适用')
p['display'] = d
changed.append(f"{p['code']}:{p['values']}")
if changed:
with open(mp, 'w', encoding='utf-8') as f:
json.dump(meta, f, ensure_ascii=False, indent=1)
print(f'[{s}] 补空值 -> {" | ".join(changed)}')
else:
print(f'[{s}] 无需修改')