我想在 YAML 中按顺序排列多行。我就是这样做的,但是我在用 python 解析它时遇到了问题:
Element: |
- multiple lines
come here
Run Code Online (Sandbox Code Playgroud)
这样做,当我用Python解析它时,我仍然-
在解析的数据中看到了。似乎YAML 不明白这是一个列表。
您的输入不是列表,YAML 只知道映射(构造为 Pythondict
和序列(构造为 Python list
)。
通常-
是块序列条目指示符,但是由于您在第一行开始块样式文字作为 key 的值Element
,由于 ,|
它后面的所有缩进都是此标量的一部分(构造为 Python 字符串)。
您想要做的是将指标置于文字标量之外:
Element:
- |
multiple lines
come here
Run Code Online (Sandbox Code Playgroud)
如果您加载在Python中的一个变量data
,然后data['Element'][0]
将字符串'multiple lines\ncome here\n'
。也就是说:文字标量中的每个换行符都将是字符串中的换行符,并且该字符串上将有一个最终换行符,与后面有多少空行无关(这是剪辑)。如果您希望结尾没有换行符,则使用|-
(stripping),如果您希望所有换行符直到缩进,则使用|+
(keeping)。那些添加到|
被称为chomping 指标。
如果您在名为 的文件中有上述内容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
Run Code Online (Sandbox Code Playgroud)
这使:
'multiple lines\ncome here\n'
Run Code Online (Sandbox Code Playgroud)