我想打印以下布局:
extra:
identifiers:
biotools:
- http://bio.tools/abyss
我正在使用此代码添加节点:
yaml_file_content['extra']['identifiers'] = {}
yaml_file_content['extra']['identifiers']['biotools'] = ['- http://bio.tools/abyss']
但是,相反,我得到了这个输出,它将工具封装在[]:
中
extra:
identifiers:
biotools: ['- http://bio.tools/abyss']
我尝试了其他组合但没有用?
答案 0 :(得分:1)
加载YAML文件后,它不再是“yaml”;它现在是一个Python数据结构,biotools
键的内容是list
:
>>> import ruamel.yaml as yaml
>>> data = yaml.load(open('data.yml'))
>>> data['extra']['identifiers']['biotools']
['http://bio.tools/abyss']
与任何其他Python列表一样,您可以append
向它发送:
>>> data['extra']['identifiers']['biotools'].append('http://bio.tools/anothertool')
>>> data['extra']['identifiers']['biotools']
['http://bio.tools/abyss', 'http://bio.tools/anothertool']
如果您打印出数据结构,则会获得有效的YAML:
>>> print( yaml.dump(data))
extra:
identifiers:
biotools: [http://bio.tools/abyss, http://bio.tools/anothertool]
当然,如果由于某种原因你不喜欢那个列表表示,你也可以得到语法上的等价物:
>>> print( yaml.dump(data, default_flow_style=False))
extra:
identifiers:
biotools:
- http://bio.tools/abyss
- http://bio.tools/anothertool
答案 1 :(得分:1)
- http://bio.tools/abyss
中的破折号表示序列元素,如果以块样式转储Python列表,则会在输出中添加。
所以不要这样做:
yaml_file_content['extra']['identifiers']['biotools'] = ['- http://bio.tools/abyss']
你应该这样做:
yaml_file_content['extra']['identifiers']['biotools'] = ['http://bio.tools/abyss']
然后使用:
强制所有复合元素的输出为块样式yaml.default_flow_style = False
如果您想要更精细的控制,请创建一个ruamel.yaml.comments.CommentedSeq
实例:
tmp = ruamel.yaml.comments.CommentedSeq(['http://bio.tools/abyss'])
tmp.fa.set_block_style()
yaml_file_content['extra']['identifiers']['biotools'] = tmp