数据 (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>
50 lines
1.9 KiB
Python
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}] 无需修改')
|