我想使用Python 3将YAML文件中的值替换为JSON文件
我有许多JSON文件,我希望从主YAML文件中获取值,并仅替换某些值,如源服务器ip、电子邮件、主机名
例如,我有这个YAML文件(mast_conf.YAML):
- sourcesystem1:
sourceServer: 1.2.3.500
MailTo: gokul@gmail.com
- sourcesystem2:
sourceServer1: 2.2.3.500
sourceServer2: 3.2.3.500
MailTo: gokul@gmail.com
JSON文件(sourcesystem1.JSON):
{
"source":"sourcesystem1",
"frequency":"daily",
"sourceServer":"1.2.1.2",
"hostName":"1.2.1.3",
"fileFormat":"csv",
"delimiterType":"semicolon"
}
另一个JSON文件(sourcesystem2.JSON):
{
"source":"sourcesystem2",
"frequency":"daily",
"sourceServer":"1.2.3.2",
"hostName":"1.2.1.7",
"fileFormat":"csv",
"delimiterType":"commaseperated"
}
下面是我试图解析json文件中的值的代码
import json
import yaml
with open("master_conf.yaml", 'r') as f:
yaml_config = yaml.safe_load(f)
yaml_config = {
list(config.keys()[0]): list(config[config.keys()[0]])
for config in yaml_config
}
json_files = ( "sourcesystem1.json",
"sourcesystem2.json",
)
for json_file in json_files:
with open(json_file, "r") as f:
sourcesystem_conf = json.load(f)
sourcesystem = sourcesystem_conf["source"]
if sourcesystem in yaml_config:
for key, value in yaml_config[sourcesystem].items():
sourcesystem_conf[key] = value
with open(json_file, "w") as f:
json.dump(sourcesystem_conf, f, indent=2)
我通过程序得到以下错误
TypeError: 'dict_keys' object does not support indexing
When I run indivudually I get this issue for yaml
>>> yaml_config = { ... config.keys()[0]: config[config.keys()[0]] ... for config in yaml_config ... } Traceback (most recent call last): File "<stdin>", line 3, in <module> File "<stdin>", line 3, in <dictcomp> TypeError: 'dict_keys' object is not subscriptable >>>
是否有更简单的方法来实现我的最终目标,即我希望从Yaml配置文件替换JSON文件中的值
这是从主Yaml文件自动更新1000个Json文件所必需的
最简单的方法是使用pyyaml,请参见Jon's answer
然后,您可以使用它加载yaml文件:
使用源系统作为键操作dict会更容易
在python 2中
aDict.keys()
返回一个列表,因此以下操作将起作用:在python 3中
aDict.keys()
不再返回列表,因此您可以简单地使用for循环:然后,您可以迭代json文件来更新它们:
相关问题 更多 >
编程相关推荐