我想在YAML中的序列中包含多行。这是我的操作方式,但是在python中解析时遇到了问题:
Element: |
- multiple lines
come here
以这种方式进行操作,当我使用Python进行解析时,仍然在解析的数据中看到-
。似乎YAML无法理解这是一个列表。
答案 0 :(得分:1)
使用此语法(至少适用于yaml
Python软件包)
stuff:
- 'this is a multiline
string'
换句话说,引用字符串并缩进其连续性。
答案 1 :(得分:0)
您的输入不是列表,YAML仅了解映射(构造为Python dict
和序列(构造为Python list
)。
通常-
是块顺序输入指示器,但是由于您在第一行将块样式文字作为键Element
的值,因此由于|
,一切紧缩在它后面的是此标量的一部分(构造为Python字符串)。
您要执行的操作是将指标置于文字标量之外:
Element:
- |
multiple lines
come here
如果在Python中将其加载到变量data
中,则data['Element'][0]
将是字符串'multiple lines\ncome here\n'
。也就是说:您的文字标量中的每个换行符都将是您的字符串中的换行符,并且该字符串上将有一个最终的换行符,而与后面跟随多少空行无关(这是剪切)。如果希望结尾没有换行符,请使用|-
(剥离),如果希望所有换行符直到缩进,请使用|+
(保留)。 |
的那些添加称为chomping indicators。
如果在名为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'