Многострочный в последовательности в YAML - PullRequest
0 голосов
/ 22 декабря 2018

Я хотел бы иметь несколько строк в последовательности в YAML.Вот как я это делаю, но у меня есть проблемы с синтаксическим анализом в python:

Element: |
   - multiple lines
     come here

Делая это таким образом, когда я анализирую это с Python, я все еще вижу - в проанализированных данных.Похоже, YAML не понимает, что это список.

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Ваш ввод не является списком, 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'
0 голосов
/ 22 декабря 2018

Используйте этот синтаксис (по крайней мере, для пакета yaml Python)

stuff:
  - 'this is a multiline
  string'

Другими словами, заключите строку в кавычки и сделайте отступ для ее продолжения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...