Ваш ввод не является списком, YAML знает только о отображениях (построенных как Python dict
и последовательностях (построенных как Python list
).
Обычно -
- это запись последовательности блоковиндикатор, но поскольку вы запускаете литерал стиля блока в первой строке как значение для ключа Element
, из-за |
все, что после него имеет отступ, является частью этого скаляра (созданного в виде строки Python).
То, что вы хотите сделать, это вывести индикатор за пределы литерального скаляра:
Element:
- |
multiple lines
come here
Если вы загрузите его в Python в переменную data
, тогда data['Element'][0]
будет строкой'multiple lines\ncome here\n'
. То есть: каждая новая строка в вашем буквальном скаляре будет новой строкой в вашей строке, и в этой строке будет один последний заключительный перевод строки, независимо от того, сколько пустых строк следует (это отсечение). Если вы хотите, чтобы конецчтобы не было новой строки, затем используйте |-
(зачистка), а если вы хотите, чтобы все новые строки оставались без отступа, тогда используйте |+
(сохранение). Эти дополнения к |
называются индикаторы жужжания .
Если у вас есть вышеперечисленное в файле с именем input.yaml
:
import sys
from pathlib import Path
import ruamel.yaml
input = Path('input.yaml')
yaml = ruamel.yaml.YAML(typ='safe')
data = yaml.load(input)
print(f'{data["Element"][0]!r}') # print the representation, so you can see where the newlines are
, который дает:
'multiple lines\ncome here\n'