我是python和YAML的新手,我有一种情况需要保留这个文件,附上相关数据
__blocks: {}
messages:
CANMessages:
- CAN: !!python/unicode 'IuK-CAN'
D0:
- 13
D1:
- 0
D2:
- 0
D3:
- 0
D4:
- 0
D5:
- 0
D6:
- 240
D7:
- 0
DL: 7
Description: !!python/unicode 'clo'
ID: 574
Period: -1
id: d3206970-20f2-11e6-bfd7-185e0fc5ec33
timestamp: 1464013797.767
- CAN: !!python/unicode 'IuK-CAN'
D0:
- 13
D1:
- 0
D2:
- 0
D3:
- 0
D4:
- 0
D5:
- 0
D6:
- 240
D7:
- 0
DL: 7
Description: !!python/unicode 'cli'
ID: 574
Period: -1
id: d37y069700f2-11e6-bfd7-185e0fc5ec33
timestamp: 1487013797.767
MOSTMessages: []
pages: []
settings: {}
此处只需要附加的内容是-CAN到时间戳
的部分- CAN: //1
..
timestamp: xyznumbers
- CAN: //2
..
timestamp: xyznumbers
- CAN: //n
..
timestamp: xyznumbers
这里的每个附件都是CAN的测试场景。
我写的逻辑实际上一遍又一遍地附加所有内容,我不知道如何附加所需的块。
data = {'__blocks': {},
'messages':
{'CANMessages':
[
{'DL': 7,
'Description': u'%s'%self.Description,
'timestamp': current_milli_time,
'D3': ['%s'%self.D3],
'Period': self.Period,
'ID': hex(self.ID),
'CAN': u'%s'%self.CAN,
'D6': ['%s'%self.D6],
'D7': ['%s'%self.D7],
'D4': ['%s'%self.D4],
'D5': ['%s'%self.D5],
'D2': ['%s'%self.D2],
'id': 'xxx-xxx-xxx-xxx',
'D0': ['%s'%self.D0],
'D1': ['%s'%self.D1]
}
],
'MOSTMessages': []},
'pages': [],
'settings': {}}
with open(fileMock, 'a') as outfile:
outfile.write( yaml.dump(data, default_flow_style=False) )
答案 0 :(得分:0)
打开输出文件以追加(open(fileMock, 'a')
)并且每次都写入整个数据结构。您可能根本不应在YAML文件中使用a
,除非您希望文件中包含多个文档。
将所有元素附加到数据结构data
,然后用以下内容写出来:
with open(fileMock, 'w') as outfile:
outfile.write( yaml.dump(data, default_flow_style=False))
(请注意'w'
open()
参数
或者,您可以一次阅读追加,一个项目,但是您必须将YAML重新读回data
,最好是ruamel.yaml.round_trip_load()
以保留您的密钥顺序和布局,附加新的数据在正确的位置,然后转储到YAML文件(再次使用open(fileMock, 'w')
而不是open(fileMock, 'a')
)