python解析yaml文件

原创
2014/09/24 02:24
阅读数 1W

系统:ubuntu1404、python:2.7

  1. 解析yaml文件要先安装pyyaml,可以直接用sudo pip  install  pyyaml 安装yaml模块;

  2. t.yaml文件内容:隔距为2个空格或4个空格

t.yaml" 10L, 143C                            1,1           All
host:
    ip00:
        192.168.1.1
    ip01:
        one: 192.168.1.2
        two: 192.168.1.254
soft:
    apache: 2.2
    mysql: 5.2
    php:   5.3

3.解析:

In [160]: import  yaml               #倒入模块
In [161]: s=yaml.load(file('t.yaml')) #加载t.yaml配置文件
In [162]: print s['host']['ip00'][:]
192.168.1.1

In [163]: print s['host']['ip00']
192.168.1.1

In [164]: print s['host']
{'ip01': {'two': '192.168.1.254', 'one': '192.168.1.2'}, 
 'ip00': '192.168.1.1'}

In [165]: print s
{'host': {'ip01': {'two': '192.168.1.254', 'one': '192.168.1.2'}, 
'ip00': '192.168.1.1'}, 'soft': {'apache': 2.2, 'php': 5.3, 'mysql': 5.2}}

In [166]: print s['host']['ip00']
192.168.1.1

In [167]: print s['host']['ip01']
{'two': '192.168.1.254', 'one': '192.168.1.2'}

In [168]: print s['host']['ip01']['one']
192.168.1.2

In [169]: print s['soft']
{'apache': 2.2, 'php': 5.3, 'mysql': 5.2}

n [171]: print s['soft']['apache']
2.2

In [172]: print s['soft']['php']
5.3

4.写yaml配置文件:

file='kkk.yaml'
data={'host': {'ip01': {'two': '192.168.1.254', 'one': '192.168.1.2'}, 'ip00': '192.168.1.1'}, 'soft': {'apache': 2.2, 'php': 5.3, 'mysql': 5.2}}

f=open(file,'w')
yaml.dump(data,f)
f.close()

-------------------------------------------------------------------------------------------------------------------

yaml解析完善版:

__author__ = 'Administrator'
#py34,ymal解析比较完善的,,,字典、列表可相互嵌套,相互交叉递归
#2015-1-4   jk409@qq.com
import yaml
filename = 'E:\\py\\script\\py34\\sql\\t.yaml'
f = open(filename)
s = yaml.load(f)
f.close()
def jx_list(i):
    for n in i:
        if type(n) == list:
            jx_list([n])
            print(i, n)
        elif type(n) == dict:
            jx_dict(n)
        else:
            print(n)

def jx_dict(i):
    for n in i:
        if type(i[n]) == dict:
            jx_dict(i[n])
        elif type(i[n]) == list:
            jx_list(i[n])
            pass
        else:
            print(n, i[n])

if __name__ == "__main__":
    for i in s:
        if type(s[i]) == dict:
            jx_dict(s[i])
        if type(s[i]) == list:
            jx_list(s[i])



展开阅读全文
打赏
0
1 收藏
分享
加载中
jk409博主

引用来自“MyKings”的评论

这也叫解析,起码写一个递归函数来遍历吧~,参数都写死了,万一需求变更了呢~
这只是对固定格式的简单解析,,,还需要完善。。。
2015/01/04 14:30
回复
举报
这也叫解析,起码写一个递归函数来遍历吧~,参数都写死了,万一需求变更了呢~
2015/01/04 13:40
回复
举报
更多评论
打赏
2 评论
1 收藏
0
分享
返回顶部
顶部