Я хотел бы иметь несколько строк в последовательности в YAML. Вот как я это делаю, но у меня есть проблемы с синтаксическим анализом в Python:
Element: |
- multiple lines
come here
Делая это таким образом, когда я анализирую это с Python, я все еще вижу -
в проанализированных данных. Кажется, YAML не понимает, что это список.
Ваш ввод не является списком, YAML знает только о отображениях (созданных как Python dict
и последовательности (созданных как list
Python).
Обычно -
это индикатор записи последовательности блоков, но поскольку вы начинаете литерал стиля блока в первой строке как значение для ключевого 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'
Используйте этот синтаксис (по крайней мере для yaml
Python yaml
)
stuff:
- 'this is a multiline
string'
Другими словами заключите в кавычки строку и сделайте отступ в ее продолжении