代码之家  ›  专栏  ›  技术社区  ›  Alper

使用PyYAML获取YAML中的所有子项键值

  •  0
  • Alper  · 技术社区  · 4 年前

    假设我有一个YAML,比如:

    Resources:
      AlarmTopic:
        Type: AWS::SNS::Topic
        Properties:
          Subscription:
            - !If
              - ShouldAlarm
                Protocol: email
    

    如果我浏览每个资源,想知道其中一个值是否包含某个字符串,那么如何获取所有子项的每个键和值?我正在使用Pyaml,但我也愿意使用其他库。

    0 回复  |  直到 4 年前
        1
  •  0
  •   flyx    4 年前

    如果只想检查标量值,可以使用低级事件API:

    import yaml
    import sys
    
    input = """
    Resources:
      AlarmTopic:
        Type: AWS::SNS::Topic
        Properties:
          Subscription:
            - !If
              - ShouldAlarm
              - Protocol: email
    """
    
    for e in yaml.parse(input):
        if isinstance(e, yaml.ScalarEvent):
            print(e.value)
    

    (我修复了你的YAML,因为它有语法错误。)这将产生:

    Resources
    AlarmTopic
    Type
    AWS::SNS::Topic
    Properties
    Subscription
    ShouldAlarm
    Protocol
    email