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


  1. 我有一个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. 我无法返回值,并且在函数外部调用的打印语句中收到"名称错误:未定义名称'配置'

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

  2. 我通过使用集合确保没有重复项,但想使用循环并将我的字符串格式化命令中的值存储到变量中,而无需使用"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 文档和教程。

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

例如:

x = {'lol': 1, 'kek': 2}
for name, value in x.items():
print(name, value)

最新更新