使用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
这可以用任何差异/合并工具完成吗?
编辑:修复所需结果中的拼写错误
如果不解析文件,我认为你不能做你想做的事。但是你可以使用一个简短的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()
更智能,即递归。