YAML中序列中的多行

时间:2018-12-21 23:28:49

标签: python yaml

我想在YAML中的序列中包含多行。这是我的操作方式,但是在python中解析时遇到了问题:

Element: |
   - multiple lines
     come here

以这种方式进行操作,当我使用Python进行解析时,仍然在解析的数据中看到-。似乎YAML无法理解这是一个列表。

2 个答案:

答案 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'