Yaml值在python 3中不可迭代

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Yaml值在python 3中不可迭代相关的知识,希望对你有一定的参考价值。

为了更新数千个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)
答案

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

import bios

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

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

以上是关于Yaml值在python 3中不可迭代的主要内容,如果未能解决你的问题,请参考以下文章

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

“TypeError:'WebElement'对象不可迭代”错误代码python爬取

python 对象不可迭代或不可下标

使用 pybind11 包装 yaml-cpp 迭代器

TypeError:'int'对象不可迭代,使用 Python 3 [关闭]

python NoneType 对象不可迭代