如何使用python更新yaml文件?

2024-06-01 11:41:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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到timestamp的部分

^{pr2}$

这里的每个附加都是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) )

Tags: selfidunicodedescriptioncantimestampperiodd2
1条回答
网友
1楼 · 发布于 2024-06-01 11:41:19

打开输出文件进行追加(open(fileMock, 'a')),每次写入整个数据结构。您可能根本不应该在YAML文件中使用a,除非您希望文件中包含多个文档。在

将所有元素附加到数据结构data,然后用以下命令写出:

    with open(fileMock, 'w') as outfile:
        outfile.write( yaml.dump(data, default_flow_style=False))

(注意'w'参数是open()

或者,您可以一次读取append,但必须将YAML读回data,最好是使用ruamel.yaml.round_trip_load()来保存键顺序和布局,在正确的位置追加新数据,然后转储到YAML文件(同样使用open(fileMock, 'w')而不是open(fileMock, 'a')

相关问题 更多 >