我建议您在YAML文件中使用标记,并放弃使用名称为Item1,Item2(替换为标记对象的列表)的键。在
很难看到数据的确切结构,但是第一步可以是制作YAML文档(假设在一个文件input.yaml:- ModuleName: myTestModule
- Version: 1.0
- ModuleNumbers: [96,97,98,99]
- !Message
Name: AO3_
DLC: 8
Signal1:
Name: Temperature
Length: 16
Signal2:
Name: AnalogOut3
Length: 16
SignalGroup1: #Comment
Name: app_fcex
Type: Bitfield
Signal1:
Name: drive_ready
Length: 1
Signal2:
Name: error_active
Length: 1
Signal3:
Name: warning_active
Length: 1
Signal3:
Name: Temperatur 2
Length: 8
ValueTable:
Name: TempStates
items:
- !Item
Name: INIT
Value: 1
- !Item
Name: RUN
Value: 2
- !Item
Name: DONE
Value: 3
- !Item
Name: ERROR
Value: 4
- !Message
name: AO2_
object: RX2
DLC: 8
然后加载:
^{pr2}$
上面的方法对密钥可用性进行了一些但有限的检查(例如,对Name和{}进行规范化处理。在
上面的print('data')给出了(手工包装):[{'ModuleName': 'myTestModule'},
{'Version': 1.0},
{'ModuleNumbers': [96, 97, 98, 99]},
Message(name=Signal4, DLC=8, object=None, signals[...]),
Message(name=AO2_, DLC=8, object=RX2, signals[])]
并且print(data[3].signals[2]['ValueTable']['items'][2])给出:Item(name=DONE, value=3)
当然,还应酌情增加其他课程。在