我正在尝试写一个YAML文件,但它对我来说很新,我无法弄清楚嵌套部分。
是否可以像这样写一个文件?
Manager : me@here.com
custid : 380
employees :
- Wright
- Thompson
- Hope
Manager: me2@here.com
custid : 381
employees :
- Smith
- Jones
每次我写这篇文章时,我都会遇到错误,
yaml.scanner.ScannerError: mapping values are not allowed here
这发生在custid部分之后。为什么会这样?
答案 0 :(得分:0)
Yaml只识别空格,所以如果你使用Tab进行缩进,那么这就是造成问题的原因。 Here是帮助您入门的官方文档。
答案 1 :(得分:0)
问题在于Manager :
。对于第一个,您使用键Manager
和标量值me@here.com
开始映射,然后在下一行中继续使用更多两个键值对缩进。由于你的缩进,解析器不知道在哪里附加这些。
您可能想要这样做:
- Manager : me@here.com
custid : 380
employees :
- Wright
- Thompson
- Hope
- Manager: me2@here.com
custid : 381
employees :
- Smith
- Jones
即。两个管理器的列表,每个管理器由一个映射组成,带有三个键(Manager,custid,employees)。
您还可以隐藏经理职位,将电子邮件设为密钥:
me@here.com:
custid : 380
employees :
- Wright
- Thompson
- Hope
me2@here.com:
custid : 381
employees :
- Smith
- Jones
但在这种情况下,电子邮件必须是唯一的。
您还可以在顶层使用更复杂的键(因此只要角色不同,您就可以拥有相同的电子邮件)¹:
[Manager, me@here.com]:
custid : 380
employees :
- Wright
- Thompson
- Hope
[Manager, me2@here.com]:
custid : 381
employees :
- Smith
- Jones
但一般规则是,如果您没有为每条记录设置一些唯一标识密钥,则需要使用列表。
¹这个表单是PyYAML不支持AFAIK的键,但我的ruamel.yaml解析器可以处理这些(有效)YAML键