Files
FlexibleTestPlatform/backend/planner/instruction/create_instruction_library.py
2026-02-05 16:25:52 +08:00

94 lines
2.5 KiB
Python

import csv
import yaml
import json
from collections import defaultdict
from pathlib import Path
CSV_PATH = "instruction/镜频指令抽取.csv"
YAML_OUT = "instruction/instruction_library.yaml"
JSON_OUT = "instruction/instruction_library.json"
def load_csv(path: str):
rows = []
with open(path, "r", encoding="utf-8", newline="") as f:
reader = csv.DictReader(f)
for r in reader:
rows.append(r)
return rows
def build_instruction_library(rows):
devices = defaultdict(lambda: {"index": None, "commands": []})
global_commands = []
for row in rows:
device = row["设备名称"].strip()
index = row["设备索引"].strip()
name = row["指令名称"].strip()
cmd_id = row["指令编号"].strip()
ret = row["返回值"].strip()
desc = row["指令描述"].strip()
role = row["指令角色"].strip()
# 指令类型转换
type_map = {
"构造函数": "constructor",
"普通指令": "normal",
"循环开始": "loop_begin",
"循环结束": "loop_end",
}
cmd_type = type_map.get(role, "normal")
cmd_obj = {
"name": name,
"id": cmd_id,
"return": ret if ret else "",
"description": desc,
"type": cmd_type
}
if device == "" or device is None:
# 无设备 → 全局指令
global_commands.append(cmd_obj)
else:
# 有设备 → 写入设备指令
if devices[device]["index"] is None:
devices[device]["index"] = int(index)
devices[device]["commands"].append(cmd_obj)
return {
"devices": devices,
"global_commands": global_commands
}
def save_yaml(data, path):
with open(path, "w", encoding="utf-8") as f:
yaml.dump(data, f, allow_unicode=True, sort_keys=False)
def save_json(data, path):
with open(path, "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
if __name__ == "__main__":
print("📥 Loading CSV...")
rows = load_csv(CSV_PATH)
print("🔧 Building instruction library...")
lib = build_instruction_library(rows)
print("💾 Saving YAML...")
save_yaml(lib, YAML_OUT)
print("💾 Saving JSON...")
save_json(lib, JSON_OUT)
print("\n🎉 Done! Instruction library generated:")
print(f" - YAML: {YAML_OUT}")
print(f" - JSON: {JSON_OUT}")