Yaml python为多个值进行分区

时间:2015-05-30 09:32:26

标签: python python-3.x yaml

鉴于test.yml:

Step1:
    input: dd if=/dev/urandom of=/dev/null count=8192 bs=8192
    output: 8192+0 records in
    output: 8192+0 records out

加上python脚本来阅读它:

import yaml

stream = open("test.yml", 'r')
Steps = yaml.load(stream)   
print(Steps)

但是它只返回最后一个输出:

{'Step1': {'output': '8192+0 records out', 'input': 'dd if=/dev/urandom of=/dev/null count=8192 bs=8192'}}

无论数量多少,我如何获得所有输出值?

1 个答案:

答案 0 :(得分:1)

使用相同名称的多个键无法执行您想要的操作。 YAML关联数组(如Python字典)必须具有唯一键,并且必须忽略重复键(可能产生警告)或被视为错误。请参阅YAML specification

  

两个相等的键出现在同一个映射节点中是错误的。在这种情况下,YAML处理器可能会继续,忽略第二个键:值对并发出适当的警告。< / p>

强调我的。

Python词典的行为大致相同;键值对必须是唯一的。 PyYAML解析器以与Python字典相同的方式处理上述情况;最后一个条目获胜。

ticket in the PyYAML tracker要求在这种情况下发出警告或例外。

为您的步骤提供唯一键,或使用值列表代替:

Step1:
    input: dd if=/dev/urandom of=/dev/null count=8192 bs=8192
    output:
        - 8192+0 records in
        - 8192+0 records out