如何使用 python 更新 yaml 文件?

Posted

技术标签:

【中文标题】如何使用 python 更新 yaml 文件?【英文标题】:How to update yaml file using python? 【发布时间】:2016-09-26 00:23:03 【问题描述】:

我是 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) )

【问题讨论】:

【参考方案1】:

您打开输出文件以进行附加 (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')

【讨论】:

是的,我同意这一点,我接受这是真实的答案。

以上是关于如何使用 python 更新 yaml 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Pipeline Utility Steps 插件更新现有 yaml 文件的内容

如何在 Python 中使用 ruamel.yaml 从 YAML 文件中获取注释?

使用 python 更新和删除 YAML 文件?

如何从使用 python 解析的 yaml 文件中调用和迭代值?

Python如何调用yaml文件中的参数来执行ssh命令

如何从纯 python 创建 yaml 文件?