如何“合并”两个YAML文本文件?

问题描述 投票:2回答:1

使用meld / xxdiff /或其他东西?

如果我有两个yaml文件,我怎么能自动合并它们?他们每个都有几百行。常见的部分是abc:

abc:
  x:
    0: null
  y:
    1: null

def:
  x:
    0: string

...

abc:
  u: null
  v: null
  w: null

def:
  u: 
    0: null
  v: null
  w: null
...

期望的结果:

abc:
  x:
    0: null
  y:
    1: null
  u: null
  v: null
  w: null

def:
  x:
    0: string
  u: 
    0: null
  v: null
  w: null        

这可以用任何差异/合并工具完成吗?

编辑:修复所需结果中的拼写错误

git merge yaml pyyaml
1个回答
2
投票

如果不解析文件,我认为你不能做你想做的事。但是你可以使用一个简短的python程序:

import sys

import ruamel.yaml

data = None

for file_name in sys.argv[1:]:
    d = ruamel.yaml.round_trip_load(open(file_name, 'rb'))
    if data is None:
        data = d
        continue
    for k in d:
        data[k].update(d[k])

print(ruamel.yaml.round_trip_dump(data, indent=2, explicit_end=True))

这给出了(假设适当的输入文件:

abc:
  x:
    0:
  y:
    1:     

  u:
  v:
  w:
def:
  x:
    0: string
  u:
    0:
  v:
  w:
...

请注意,额外的空格会丢失,因为ruamel.yaml(披露:我是该软件包的作者),只有(部分)保留空白,如果与评论相邻。如果需要超过顶级键合并,您还需要使.update()更智能,即递归。

© www.soinside.com 2019 - 2024. All rights reserved.