![](/img/trans.png)
[英]How to insert a comment line to YAML in Python using ruamel.yaml?
[英]python ruamel.yaml package, how to get header comment lines?
我想在 header 行上獲得 YAML 文件評論,例如
# 11111111111111111
# 11111111111111111
# 22222222222222222
# bbbbbbbbbbbbbbbbb
---
start:
....
我在加載的數據上使用了ca
屬性,但發現上面沒有這些注釋。 有沒有其他方法可以得到這些評論?
目前( ruamel.yaml==0.17.17
)出現在文檔開始標記( ---
)之前的注釋不會從DocumentStartToken
傳遞到DocumentStartEvent
,因此這些注釋在解析過程中實際上會丟失。 即使它們被傳遞,保留它們也很重要,因為DocumentStartEvent
在合成過程中被靜默刪除。
您可以將注釋放在指令指示符( ---
)之后,這使您可以毫無問題地使用.ca
屬性獲取注釋,或者完全刪除該指示符,因為它是多余的(至少在您的示例中) . 或者,您必須在加載器周圍編寫一個小包裝器:
import sys
import pathlib
import ruamel.yaml
fn = pathlib.Path('input.yaml')
def load_with_pre_directives_comments(yaml, path):
comments = []
text = path.read_text()
if '\n---\n' not in text and '\n--- ' not in text:
return yaml.load(text), comments
for line in text.splitlines(True):
if line.lstrip().startswith('#'):
comments.append(line)
elif line.startswith('---'):
return yaml.load(text), comments
break
yaml = ruamel.yaml.YAML()
yaml.explicit_start = True
data, comments = load_with_pre_directives_comments(yaml, fn)
print(''.join(comments), end='')
yaml.dump(data, sys.stdout)
這使:
# 11111111111111111
# 11111111111111111
# 22222222222222222
# bbbbbbbbbbbbbbbbb
---
start: 42
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.