Python3中的Yaml值不可编辑

2024-09-30 00:32:58 发布

您现在位置:Python中文网/ 问答频道 /正文

为了更新1000个Json文件,以自动方式从主Yaml文件更新它。在迭代过程中,我面临for循环中的问题。我使用pip安装了pyyaml,我使用的是python 3.7版本

下面是我的yaml文件(master_conf.yaml)

-  sourcesys1:
    sourceServer: 1.2.3.500
    MailTo: gokul@gmail.com
-  sourcesys2:
    sourceServer1: 2.2.3.500
    sourceServer2: 3.2.3.500
    MailTo: gokul@gmail.com

我的Json文件(sourcesys1.Json)。。sourcesys1000.json

   {
        "source":"sourcesys1",
        "frequency":"daily",
        "sourceServer":"1.2.1.2",
        "hostName":"1.2.1.3",
        "fileFormat":"csv",
        "delimiterType":"semicolon"
    } 

我尝试迭代一个yaml文件,并尝试将这些值作为命令并替换为json文件

   import yaml

    with open("master_conf.yaml", 'r') as f:
        yaml_config = yaml.safe_load(f)

    for config in yaml_config:
    ...  config.keys()[0]: config[config.keys()[0]]

我在for语句中得到了这个错误

回溯(最近一次呼叫最后一次): 文件“”,第2行,在 TypeError:“dict_keys”对象不可下标

需要关于上述错误的帮助吗

完成后,我需要迭代json文件以替换yaml文件中的值

这是我在创建yaml文件字典时面临的最后一个问题代码

import json
import yaml

with open("mast_conf.yaml", 'r') as f:
    yaml_config = yaml.safe_load(f)

yaml_config = {
    config.keys()[0]: 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)

Tags: 文件inimportconfigjsonyamlforconf
1条回答
网友
1楼 · 发布于 2024-09-30 00:32:58

在Python 3中,keys()返回一个iterable但不可索引的对象。 尝试将其转换为列表 要将yaml转换为示例字典,可以使用库bios

import bios

yaml_config = bios.read('master_conf.yaml')
print(yaml_config)

这将提供您提供的字典格式

相关问题 更多 >

    热门问题