【发布时间】:2020-09-05 09:34:31
【问题描述】:
我想使用 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 文件中的值的最终目标
这需要以自动方式更新 1000 个 Json 文件,以便从主 Yaml 文件更新它
【问题讨论】:
-
使用 pyyaml 库加载文件(pyyaml.org/wiki/PyYAMLDocumentation)并使用 json 库构建输出文件(docs.python.org/fr/3.6/library/json.html)怎么样?
-
请描述您对这项任务的具体问题。我们很乐意帮助您找出代码中的错误或解释您不理解的事情,但您似乎只是在寻求解决方案。
标签: python json python-3.x parsing yaml