我想读取一个YAML文件并按照它在文件中的顺序打印出列表中的列表。通过python中的YAML列表迭代
所以YAML:
b: ...
a: ...
我的蟒蛇是:
for key, value in yaml.load(open(input_file)).items():
print(str(key))
输出变为:
a
b
但是我需要它是b
然后a
。我也试过iteritems()
,我得到了同样的结果。
我想读取一个YAML文件并按照它在文件中的顺序打印出列表中的列表。通过python中的YAML列表迭代
所以YAML:
b: ...
a: ...
我的蟒蛇是:
for key, value in yaml.load(open(input_file)).items():
print(str(key))
输出变为:
a
b
但是我需要它是b
然后a
。我也试过iteritems()
,我得到了同样的结果。
如果你的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()
,因为它是不安全的。
谢谢,这很有道理。我需要仔细研究一下YAML以便弄清楚这个问题,但是谢谢你指出我正确的方向:) – Rikg09
yaml.load
在这种情况下只返回一个dict
,默认情况下它是无序的。如果您关心维护订单,则需要使用OrderedDict
,请参阅here以了解如何执行此操作的示例。
为什么你要做'print(str(key))',这是否给出了与'print(key)'不同的结果? – Anthon
如果你的YAML在'a'之前确实有一个空格,而不是在'b'之前,那么它是无效的YAML。但是因为在你的输出中,空间神奇地出现在'b'之前,我认为这是一个格式错误。 – Anthon