发布于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]
我希望逻辑像以下一样工作:
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黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!