如何从使用 python 解析的 yaml 文件中调用和迭代值?

Posted

技术标签:

【中文标题】如何从使用 python 解析的 yaml 文件中调用和迭代值?【英文标题】:How to call and iterate values from a yaml file parsed using python? 【发布时间】:2018-10-07 17:08:52 【问题描述】:

    我有一个 yaml 文件如下:

    server1:
      host: os1
      ip: ##.###.#.##
      path: /var/log/syslog
      file: syslog
      identityfile: /identityfile/keypair.pub
    
    server2:
      host: os2
      ip: ##.###.#.##
      path: /var/log/syslog
      file: syslog.1
      identityfile: /identityfile/id_rsa.pub
    

我有一段代码可以解析 yaml 并读取条目。

从配置 yaml 文件中读取数据

    def read_yaml(file):
        with open(file, "r") as stream:
    try:
        config = yaml.load(stream)
        print(config)
    except yaml.YAMLError as exc:
        print(exc)
        print("\n")
return config

read_yaml("config_file") 打印(配置)

我的问题: 1. 我无法返回值,并且在函数外部调用的打印语句中出现“NameError: name 'config' is not defined”。

    如何通过仅传递参数来迭代和读取 yaml 文件中的值? 前任: print('host@ip:path'.format(**config['os1'])) 但没有“os1”,因为 yaml 文件可能有 100 个条目

    我通过使用集合确保没有重复项,但想使用循环并将字符串格式化命令中的值存储到变量中,而不使用“os1”或“os2”或“os#”。

    def iterate_yaml():
    remotesys = set()
    
    for key,val in config.items():
        print(" = ".format(key,val))
    
    
    #check to ensure duplicates are removed by storing it in a set
    
    remotesys.add('host@ip:path'.format(**config['os1']))
    remotesys.add('host@ip:path'.format(**config['os2']))
    remotesys.add('host@ip:path'.format(**config['os3']))
    

感谢您的帮助。

【问题讨论】:

【参考方案1】:
    您会收到NameError 异常,因为您没有返回任何值。您必须从函数中返回 config

例如:

def read_yaml(...):
    # code

     return config

然后,通过调用read_yaml,您将返回您的配置。

查看Python documentation 和教程。

2-3。您可以使用dict.items 方法执行for 循环。

例如:

x = 'lol': 1, 'kek': 2

for name, value in x.items():
    print(name, value)

【讨论】:

谢谢。假设我有 x,y,z,a,b,c..etc 那么你知道如何处理这种情况吗?

以上是关于如何从使用 python 解析的 yaml 文件中调用和迭代值?的主要内容,如果未能解决你的问题,请参考以下文章

Python如何调用yaml文件中的参数来执行ssh命令

python操作yaml文件

如何在 Python 中使用 ruamel.yaml 从 YAML 文件中获取注释?

使用nodejs AWS lambda从S3加载并解析yaml文件

01 python基础——python解析yaml类型文件

如何解析包含多个文档的 YAML 文件?