簡體   English   中英

python ruamel.yaml package,如何獲得 Z099FB995346F31C7549F6E40EDB03 注釋行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM