我在YAML中有一个配置文件,当前使用yaml.safe_load作为字典加载。为了方便编写代码,我希望将其作为一组嵌套对象加载。引用更深层次的字典很麻烦,并使代码更难阅读。
例:
import yaml mydict = yaml.safe_load(""" a: 1 b: - q: "foo" r: 99 s: 98 - x: "bar" y: 97 z: 96 c: d: 7 e: 8 f: [9,10,11] """)
目前,我访问诸如
mydict["b"][0]["r"] >>> 99
我想做的是访问相同的信息,例如
mydict.b[0].r >>> 99
有没有办法像这样嵌套对象加载YAML?还是我必须滚动自己的类并递归地将这些词典转换为嵌套对象?我猜测namedtuple可以使此过程变得容易一些,但我更喜欢现成的解决方案。
找到了一个方便的库来完全满足我的需要:https : //github.com/Infinidat/munch
import yaml from munch import Munch mydict = yaml.safe_load(""" a: 1 b: - q: "foo" r: 99 s: 98 - x: "bar" y: 97 z: 96 c: d: 7 e: 8 f: [9,10,11] """) mymunch = Munch(mydict)
(我不得不编写一个简单的方法来将所有下标递归转换为munch,但是现在我可以使用例如
>>> mymunch.b.q "foo"