2017-08-02 187 views
0

我想读取一个YAML文件并按照它在文件中的顺序打印出列表中的列表。通过python中的YAML列表迭代

所以YAML:

b: ... 
a: ... 

我的蟒蛇是:

for key, value in yaml.load(open(input_file)).items(): 
    print(str(key)) 

输出变为:

a 
b 

但是我需要它是b然后a。我也试过iteritems(),我得到了同样的结果。

+0

为什么你要做'print(str(key))',这是否给出了与'print(key)'不同的结果? – Anthon

+0

如果你的YAML在'a'之前确实有一个空格,而不是在'b'之前,那么它是无效的YAML。但是因为在你的输出中,空间神奇地出现在'b'之前,我认为这是一个格式错误。 – Anthon

回答

0

如果你的YAML文件包含:

b: 2 
a: 1 

然后分析是这样的:

from ruamel.yaml import YAML 

yaml = YAML() 
input_file = 'input.yaml' 

for key, value in yaml.load(open(input_file)).items(): 
    print(str(key)) 

将打印b第一。如果您使用(更快):

yaml = YAML(typ='safe') 

这不能保证,因为YAML规范不保证映射键的顺序。

如果您正在使用YAML 1.1和PyYAML,有秩序没有这样的保证,但你不应该使用在首位yaml.load(),因为它是不安全的。

+0

谢谢,这很有道理。我需要仔细研究一下YAML以便弄清楚这个问题,但是谢谢你指出我正确的方向:) – Rikg09

0

yaml.load在这种情况下只返回一个dict,默认情况下它是无序的。如果您关心维护订单,则需要使用OrderedDict,请参阅here以了解如何执行此操作的示例。