Chinaunix

标题: 求助 有关解析yaml文件的需求 [打印本页]

作者: ajiankk    时间: 2010-11-15 17:28
标题: 求助 有关解析yaml文件的需求
本帖最后由 ajiankk 于 2010-11-17 17:50 编辑

最近想实现一个功能 需要用到yaml格式 因为这个有一个层的关系 还有一个反向的获取的需求  可能这样说有点晕 我先举个例子

如配置文件为
a.conf:
  - platform: test1
    IP: 1.1.1.1
b.conf:
- platform: test1
   IP: 2.2.2.2,3.3.3.3

- platform: test2
   IP: 1.1.1.1 4.4.4.4
简单的说 a.conf 文件在 平台 test1上的配置文件为 a_test1.conf 对应的IP是1.1.1.1  b.conf 对应的b_test1.conf 在IP 2.2.2.2 和 3.3.3.3面  依此类推
反之
要得到 IP 1.1.1.1 包含的文件有a_test1.conf和 b_test2.conf   IP 2.2.2.2 对应的有b_test2.conf  依此类推

一句话就是希望通过这个表得到 配置文件对应的IP关系 和IP对应的配置文件关系

有没有解析过这类配置文件 可以提供点建议或者方法   

因为我学python还没有多久 所以很多东西还不太熟悉 希望各位大师帮下 或者给我一些解决思路  先谢谢了。

配置文件我理解有问题现在进行下更改:
a.conf:
    platform_test1:
        IP: 1.1.1.1
b.conf:
   platform_test1:
       IP: 2.2.2.2,3.3.3.3
   platform_test2:
       IP: 1.1.1.1,4.4.4.4
这样就可以使用
f = open('/tmp/test.yml')
config = yaml.load(f)
print config
print ""
print config['a.conf']['platform_test1']['IP']
就可以找到自己要的值

现在还有个问题是 如果进行反向解析  即知道1.1.1.1这个IP 找到相应的platform_test1 下的a.conf 和 platform_test2下的b.conf
作者: icyomik    时间: 2010-11-16 22:05
看了一下你的要求,想问用ini格式可以不?这个刚好可以完成你要的,你可以import ConfigParser,或者用dict4ini也可以。
作者: ajiankk    时间: 2010-11-17 10:25
回复 2# icyomik


    ini好像不支持层级关系吧 因为这个配置可能还会有多个的层级关系  如配置文件是mysql_platform1_16G.cnf   mysql_platform1_32G.cnf  就是三层的关系了  

现在对于我的问题是 可以把这个配置文件yaml.load出来
In [4]: print datamap
------> print(datamap)
{'b.conf': [{'platform': 'test1', 'IP': '2.2.2.2,3.3.3.3'}, {'platform': 'test2', 'IP': '1.1.1.1 4.4.4.4'}], 'a.conf': [{'platform': 'test1', 'IP': '1.1.1.1'}]}

而且可以取到最KEY值

In [5]: print datamap["a.conf"]
------> print(datamap["a.conf"])
[{'platform': 'test1', 'IP': '1.1.1.1'}]

但是 [{'platform': 'test1', 'IP': '1.1.1.1'}]  并不完成是 dictory的格式 还需要去掉[]  不知道有没直接的函数可以做到   

另外最麻烦的反向获取不知道如何来做。
作者: ajiankk    时间: 2010-11-17 17:51
有了新的进展  还有童鞋可以帮忙看下后面的问题吗?
作者: icyomik    时间: 2010-11-18 11:24
列表转换为字典:
http://zh.efreedom.com/Question/ ... 4%E8%AF%8D%E5%85%B8




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2