程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

将YAML文件转换为python dict

发布于2019-08-28 16:19     阅读(987)     评论(0)     点赞(28)     收藏(3)


我有一个问题,即将YAML文件中的文档映射到dict并正确映射它们。

我有以下YAML文件,它代表一个server(db.yml):

instanceId: i-aaaaaaaa
     environment:us-east
     serverId:someServer
     awsHostname:ip-someip
     serverName:somewebsite.com
     ipAddr:192.168.0.1
     roles:[webserver,php]

我加载这个YAML文件,我可以毫无问题地做,我想我明白了。

instanceId = getInstanceId()
stream = file('db.yml', 'r')
dict = yaml.load_all(stream)

for key in dict:
    if key in dict == "instanceId":
        print key, dict[key]

我希望逻辑像以下一样工作:

  • 加载yaml,映射到dict
  • 查看文档中的每个字典,如果instanceId匹配的是getInstanceId(),则打印出该文档的所有键和值。

如果我从命令行查看地图数据结构,我得到:

{'instanceId': 'i-aaaaaaaa environment:us-east serverId:someServer awsHostname:ip-someip serverName:someserver ipAddr:192.168.0.1 roles:[webserver,php]'}

我想我可能是不正确地为YAML文件创建数据结构,并且在匹配内容时dict,我有点迷失。

旁注:我无法加载此文件中的所有文件yaml.load(),我试过yaml.load_all(),这似乎有用,但我的主要问题仍然存在。


解决方案


我认为你的yaml文件应该看起来像(或者至少是类似的,所以它的结构正确无论如何):

instance:
     Id: i-aaaaaaaa
     environment: us-east
     serverId: someServer
     awsHostname: ip-someip
     serverName: somewebsite.com
     ipAddr: 192.168.0.1
     roles: [webserver,php]

然后,yaml.load(...)返回:

{'instance': {'environment': 'us-east', 'roles': ['webserver', 'php'], 'awsHostname': 'ip-someip', 'serverName': 'somewebsite.com', 'ipAddr': '192.168.0.1', 'serverId': 'someServer', 'Id': 'i-aaaaaaaa'}}

你可以从那里去......


所以使用像:

>>> for key, value in yaml.load(open('test.txt'))['instance'].iteritems():
    print key, value


environment us-east
roles ['webserver', 'php']
awsHostname ip-someip
serverName somewebsite.com
ipAddr 192.168.0.1
serverId someServer
Id i-aaaaaaaa


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/66613/deea7ab8cf7f50aa9a50/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

28 0
收藏该文
已收藏

评论内容:(最多支持255个字符)