如何从 python 中的嵌套 YAML 文件中读取数据?

Posted

技术标签:

【中文标题】如何从 python 中的嵌套 YAML 文件中读取数据?【英文标题】:How to read data from nested YAML file in python? 【发布时间】:2020-07-05 13:56:24 【问题描述】:

我有例如 swagger.yaml 文件,我想从中读取一些变量。 例如那个文件:https://editor.swagger.io/

下面是文件片段。 有可能得到例如。 “参数”的值?最好将它们分配给一些变量。

paths:
  /pet:
    post:
      tags:
      - "pet"
      summary: "Add a new pet to the store"
      description: ""
      operationId: "addPet"
      consumes:
      - "application/json"
      - "application/xml"
      produces:
      - "application/xml"
      - "application/json"
      parameters:
      - in: "body"
        name: "body"
        description: "Pet object that needs to be added to the store"
        required: true
        schema:
          $ref: "#/definitions/Pet"
      responses:
        405:
          description: "Invalid input"
      security:
      - petstore_auth:
        - "write:pets"
        - "read:pets"

我有那个代码:

import yaml

path_to_yaml = '../data/swagger.yaml'

with open(path_to_yaml) as f:
    dataMap = yaml.safe_load(f)
print(yaml.dump(dataMap, default_flow_style=False))

【问题讨论】:

【参考方案1】:

考虑使用字典来访问参数的值。

为此安装PyYAML

import yaml
yaml_as_python_dict = yaml.load(yaml_as_string_or_bytes)

然后就是简单地通过键来获取值

例如,

dict = 'Name': 'Zara', 'Age': 7, 'Class': 'First'
print "dict['Name']: ", dict['Name']
print "dict['Age']: ", dict['Age']

【讨论】:

还要注意,它确实有在不受控制的 YAML 输入上失败的趋势。为此,您可以使用this,它可以有效地完成相同的工作。但是,再次由您来决定。【参考方案2】:

我通过安装scalpl 解决了这个问题 https://yaml.readthedocs.io/en/latest/install.html

得到例如。名称值(“正文”):

with open(file.yaml) as f:
    dataMap = yaml.safe_load(f)
proxy = Cut(dataMap)
print(proxy['paths.pet.post.parameters.name']

结果:

>>> body 

【讨论】:

以上是关于如何从 python 中的嵌套 YAML 文件中读取数据?的主要内容,如果未能解决你的问题,请参考以下文章

将 YAML 加载为嵌套对象而不是 Python 中的字典

如何从 Play 框架中的 YAML 固定装置加载(静态嵌套)枚举值?

如何使用 python 从 XML 创建嵌套字典?

如何使用 snakeYaml 库访问 YAML 文件中的内部(嵌套)键值

如果在树中嵌套其他值,则获取文本文件(yaml)中的键值[重复]

在 bash 中解析 YAML 文件中的嵌套变量