【发布时间】: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']))
感谢您的帮助。
【问题讨论】:
标签: python iterator duplicates nameerror