【问题标题】:Iterating through YAML list in python在 python 中遍历 YAML 列表
【发布时间】:2018-01-09 18:54:26
【问题描述】:

我正在尝试读取 YAML 文件并按文件中的顺序打印出我在其中的列表。

所以 YAML:

b: ...
a: ...

而我的蟒蛇是:

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

输出变成:

a
b

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

【问题讨论】:

  • 你为什么要print(str(key)),这与print(key)的结果是否不同?
  • 如果您的 YAML 在 a 之前确实有一个空格,而不是在 b 之前,则它是无效的 YAML。但由于在您的输出中,空格神奇地出现在 b 之前,我认为这是一个格式错误。

标签: python yaml items iteritems


【解决方案1】:

如果您的 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 才能更好地解决这个问题,但感谢您为我指明了正确的方向 :)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2019-08-04
    • 2013-02-18
    • 1970-01-01
    • 2018-03-08
    • 2015-10-07
    • 2013-07-13
    • 1970-01-01
    相关资源
    最近更新 更多