Вместо того, чтобы писать в своем вопросе, что вы хотели бы, было бы более полезным
чтобы увидеть вашу программу, чтобы определить, что вы делали неправильно.
Поскольку вы смешиваете и сопоставляете стили отступов, вы не можете получить точный отступ, который вы
хочу в одну свалку.
import sys
import ruamel.yaml
CS = ruamel.yaml.comments.CommentedSeq # defaults to block style
CM = ruamel.yaml.comments.CommentedMap # defaults to block style
def FS(x): # flow style list
res = CS(x)
res.fa.set_flow_style()
return res
yaml = ruamel.yaml.YAML()
yaml.indent(sequence=4, offset=2)
lst = CS()
lst.append(FS(['a', 'b', 'c']))
lst.append(FS(['d', 'e']))
lst.yaml_add_eol_comment("first list", 0, 0)
lst.yaml_add_eol_comment("second list\n\n", 1)
data = CM(flow_style_example=lst)
lst = CS()
data['block_style_example'] = lst
lst.append(CS(['a', 'b', 'c']))
lst[0].yaml_add_eol_comment("first list side comment", 0, 0)
lst.append(CS(['d', 'e']))
lst.yaml_set_comment_before_after_key(1, "second list top comment", 2)
lst = CS(['a', 'b'])
lst.yaml_add_eol_comment("foo", 0, 0)
lst.yaml_add_eol_comment("bar\n\n", 1)
data["list_of_elements_side_comment"] = lst
data.yaml_set_comment_before_after_key("list_of_elements_side_comment", "\n")
lst = CS(['a', 'b'])
lst.yaml_set_comment_before_after_key(0, "comment 1", 2)
lst.yaml_set_comment_before_after_key(1, "comment 2", 2)
data["list_of_elements_top_comment"] = lst
yaml.dump(data, sys.stdout)
, что дает:
flow_style_example:
- [a, b, c] # first list
- [d, e] # second list
block_style_example:
- - a # first list side comment
- b
- c
# second list top comment
- - d
- e
list_of_elements_side_comment:
- a # foo
- b # bar
list_of_elements_top_comment:
# comment 1
- a
# comment 2
- b
Обработка комментариев для CommentedSeq
очень похожа на
CommentedMap
: комментарии в настоящее время хранятся как диктовка, где
Индекс последовательности выполняет ту же функцию, что и ключ отображения, поэтому
использование yaml_set_comment_before_after_key
в последовательности / списке.
В приведенном выше примере используются внутренние элементы ruamel.yaml, которые могут измениться без
уведомление cq. с уведомлением, но без вашего ведома. Поэтому (будьте готовы
к) исправить номер версии ruamel.yaml, которую вы устанавливаете.