YAML中映射映射中的字面值

2024-03-29 11:29:46 发布

您现在位置:Python中文网/ 问答频道 /正文

如何使用YAML在映射映射中创建文本?在

我试图使用PyYAML将文本放入YAML中映射的映射中。基于YAML specs实现了映射的映射:

Mark McGwire: {hr: 65, avg: 0.278}
Sammy Sosa: {
    hr: 63,
    avg: 0.288
  }

而保留换行符的文字是通过以下方式完成的:

^{pr2}$

现在,我尝试将文字与映射的映射相结合,如下所示:

Sammy Sosa: {
    hr: 63,
    avg: 0.288,
    stats: |
  63 Home Runs
  0.288 Batting Average
  }

然后抛出错误:

yaml.scanner.ScannerError: while scanning for the next token
found character '|' that cannot start any token
  in "test.yml", line 4, column 12

在YAML中,是否有另一种方法或方法可以将literals放入映射的映射中?在


Tags: 方法文本tokenyaml方式hrpyyamlavg
1条回答
网友
1楼 · 发布于 2024-03-29 11:29:46

你的“文字”更正式地称为literal block style scalar。除了block style之外还有{a3}。{{1>使用的是键流的值。在

flow style you are not allowed to have block style

YAML allows flow nodes to be embedded inside block collections (but not vice-versa).

,但这就是您试图对键stats的值进行的操作。除此之外,您还没有对文本标量进行足够的缩进。在

通过删除匹配的{}和尾随,,将流样式映射更改为块样式。对齐键(块样式中需要)并适当地缩进文本标量(即比stats的开始列多)。在

这是有效的YAML,相当于您想要实现的目标:

Sammy Sosa:
  hr: 63
  avg: 0.288
  stats: |
    63 Home Runs
    0.288 Batting Average

块样式映射中的第一个示例流样式映射也可以重写为块样式映射中的块样式映射,如下所示:

^{pr2}$

在这方面没有什么区别,但是您也应该知道您使用的是yaml1.2规范(从2009年开始),但是PyYAML Python库只支持大多数旧的yaml1.1(从2005年开始)。

相关问题 更多 >