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爬取