YAML中序列中的多行

Afs*_*hin 7 syntax yaml

我想在 YAML 中按顺序排列多行。我就是这样做的,但是我在用 python 解析它时遇到了问题:

Element: |
   - multiple lines
     come here
Run Code Online (Sandbox Code Playgroud)

这样做,当我用Python解析它时,我仍然-在解析的数据中看到了。似乎YAML 不明白这是一个列表。

Ant*_*hon 7

您的输入不是列表,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)