2017-10-13 135 views
1

我想有印刷佈局如下:插入節點YAML與ruamel

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']

我嘗試了其他組合,但沒有工作?

回答

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 
+0

謝謝,@Anthon。它工作得很好。如果這些例子中的一些直接用於文檔來提高圖書館的可用性,那將是非常好的。 – ypriverol

+1

如果此答案解決了您的問題,請通過單擊答案旁邊的✔(複選標記)來考慮*接受*。這是其他人知道你的問題已經解決的方式,沒有閱讀評論。它還會在列表中更改問題的外觀和此答案。如果有更好的答案出現,您可以隨時更改接受的答案。 – Anthon

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] 

當然,如果由於某種原因你不喜歡這樣的名單表示你還可以得到在S yntactically相當於:

>>> print(yaml.dump(data, default_flow_style=False)) 
extra: 
    identifiers: 
    biotools: 
    - http://bio.tools/abyss 
    - http://bio.tools/anothertool 
+0

我編輯了我的問題,問題是與輸出,即在我的工具名稱中使用[]時,我想用' - http:// bio.tools/abyss' @larsks換行 – ypriverol

+0

我不確定你已經完全明白我的答案,但我已經添加了一些更多的例子來澄清事情。 – larsks

+0

'dump()得到了一個意想不到的關鍵字參數'default_flow_style''我使用'from ruamel.yaml import YAML'和jinja2的插件 – ypriverol