You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于AAS pypi4.0:for循环生成多JSON文件及prop.value输出异常问题

问题解决方案

1. 批量生成独立JSON文件的实现

你的现有代码存在逻辑偏差:每次循环会重建obj_store,且遍历存储对象时会为asset和submodel各生成一个文件,不符合每行对应一个独立JSON的需求。正确实现思路是:

  • 为CSV每行生成专属的Submodel(或完整AAS结构)
  • 用每行唯一标识(如name字段)作为文件名一部分,避免文件覆盖
  • 每次循环仅将当前行对应的AAS结构写入单个JSON文件

2. prop.value仅输出最后一行的原因及修复

核心问题有两种可能:

  • 你在for循环外部打印prop.value:循环内每次会用新的equipment覆盖prop变量,循环结束后仅保留最后一次赋值的内容
  • 代码缩进错误:若prop的定义不在循环体内,或打印语句位置错误,也会导致仅输出最后一行值

修正后的完整代码

import pandas as pd
from aas import model
from aas.adapter import json

# 读取CSV数据(需根据实际文件路径和分隔符调整)
data = pd.read_csv("你的CSV文件路径.csv", sep="\t")

# 定义通用资产对象(若每行需不同资产,可将此代码移至循环内部)
asset = model.Asset(
    id_short="FactoryAsset",
    identification=model.Identifier("localhost:8080/FactoryAsset", model.IdentifierType.CUSTOM)
)

for idx, row in data.iterrows():
    # 提取当前行数据
    name = row['name']
    equipment = row['Equipment']

    # 创建当前行对应的Property
    prop = model.Property(
        id_short='Specifications',
        value_type=model.datatypes.String,
        value=equipment,
        semantic_id=model.Reference(
            (model.Key(
                type_=model.KeyElements.CONCEPT_DESCRIPTION,
                local=True,
                value='0173-1#02-BAA120#008',
                id_type=model.KeyType.IRDI),)
        )
    )

    # 验证:打印当前行的prop.value(可按需删除)
    print(f"第{idx+1}行prop.value: {prop.value}")

    # 创建当前行专属Submodel
    submodel = model.Submodel(
        kind='instance',
        id_short='Technical_Data',
        identification=model.Identifier(f'localhost:8080/TechnicalData_{name}', model.IdentifierType.CUSTOM),
        submodel_element={prop},
    )

    # 初始化对象存储并添加元素
    obj_store = model.DictObjectStore[model.Identifiable]()
    obj_store.add(asset)
    obj_store.add(submodel)

    # 生成唯一文件名并写入JSON
    filename = f'/KL_TECH/Code_{name}.json'
    with open(filename, 'w', encoding='utf-8') as json_file:
        json.write_aas_json_file(json_file, obj_store, indent=4, ensure_ascii=False)

关键修正点说明

  • 改用data.iterrows()遍历CSV行,避免zip可能导致的列匹配错误,同时方便获取整行数据
  • 将print(prop.value)移至循环内部,确保打印每行对应的设备值
  • 为Submodel的identification添加name后缀,保证标识全局唯一,符合AAS规范
  • 用CSV的name字段命名文件,避免重复覆盖,同时直观对应源数据行
  • 移除遍历obj_store的冗余循环,直接将完整对象存储写入单个JSON文件(符合AAS JSON标准结构)

内容的提问来源于stack exchange,提问作者MJ K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 07:24:22