YAML附加文件
问题描述:
我有这种YAML文件中的数据:YAML附加文件
Main_part1:
label1: Main PArt1
Main_part2:
label2: Main Part2
A_part1:
label3: part1 of A
A_part2:
label4: part 2 of A
B_part1:
label5: this is part 1 of B
B_part2:
label6: this is part 2 of B
我有2个<div>
标签为A和B.如果点击了一个,的A_part1
内容应追加到HTML文件Main_part1
和A_part2
应附加到Main_part2
的内容。对于B也是类似的。然后发回一个响应给网页,添加A/B的内容。
最后,我想创建一个合并Main_Part1
和Main_Part2
的最终YAML文件。
可以使用任何类型的解决方案(Java/Python等)。
我已经创建了不同的标签来显示所有块中的内部信息是不同的。举个例子:
假设您点击A,YAML文件看起来像:
Main_part1:
label1: Main PArt1
label3: part1 of A
Main_part2:
label2: Main Part2
label4: part 2 of A
A_part1:
label3: part1 of A
A_part2:
label4: part 2 of A
B_part1:
label5: this is part 1 of B
B_part2:
label6: this is part 2 of B
然后,在最后YAML文件合并Main_part1
和Main_part2
。
答
您拥有的按键对于此操作实际上效果并不理想,因此最好的办法是将*按键的按键解析为备用字典,其中按键指向相同(字典)值作为原始映射/字典:
import sys
import ruamel.yaml
yaml_str = """\
Main_part1:
label1: Main PArt1
Main_part2:
label2: Main Part2
A_part1:
label3: part1 of A
A_part2:
label4: part 2 of A
B_part1:
label5: this is part 1 of B
B_part2:
label6: this is part 2 of B
"""
data = ruamel.yaml.round_trip_load(yaml_str)
alt = {}
for key in data:
section, part = key.split('_')
alt[(section, part)] = data[key]
alt[('Main', 'part1')].update(alt[('Main', 'part2')])
之后,你需要一个小帮手,把它和转储原:
def collapse(collapse_key):
for key in alt:
if key[0] == collapse_key:
alt[('Main', key[1])].update(alt[key])
collapse('A') # <- this should be a parameter to your script based on the click.
ruamel.yaml.round_trip_dump(data, sys.stdout)
给出:
Main_part1:
label1: Main PArt1
label3: part1 of A
label2: Main Part2
label4: part 2 of A
Main_part2:
label2: Main Part2
label4: part 2 of A
A_part1:
label3: part1 of A
A_part2:
label4: part 2 of A
B_part1:
label5: this is part 1 of B
B_part2:
label6: this is part 2 of B
如果你想用 的方式创建密钥,那么它当然会更容易一些(即,有两个元素):
(Main, part1):
label1: Main PArt1
(Main, part2):
label2: Main Part2
(A, part1):
label3: part1 of A
(A, part2):
label4: part 2 of A
(B, part1):
label5: this is part 1 of B
(B, part2):
label6: this is part 2 of B
以上是完美无缺的YAML,虽然没有被所有解析器接受。
+0
谢谢!这样可行 –
'A_part1'的值是一个映射,而'Main_part1'的值是一个(字符串)标量(除了'A_part1'之外的*映射的键的所有其他值)。这是什么意思让你将一个映射追加到标量(或者在Python中 - 说是在'str'后面追加一个'dict'),你想把映射的字符串表示添加到标量吗?你希望结果与标量(Main_Part2的值)“合并”,这意味着什么? – Anthon
所有是字符串。我相信这是冒号后的差距。另外,不要专注于内部的东西(标签部分)。当单击div A时,我需要一种将A(两个部分)内的东西附加到Main(两个部分)的方法。 –
如果标量中的冒号后有空格,那么您需要将引号括起来(单或双)。你能举一个你期望的输出YAML的例子吗? – Anthon