Jam*_*han 96 python parsing yaml
如何解析/读取YAML文件到Python对象?
例如,这个YAML:
Person:
name: XYZ
Run Code Online (Sandbox Code Playgroud)
对于这个Python类:
class Person(yaml.YAMLObject):
yaml_tag = 'Person'
def __init__(self, name):
self.name = name
Run Code Online (Sandbox Code Playgroud)
我顺便使用PyYAML.
use*_*846 180
如果您的YAML文件如下所示:
# tree format
treeroot:
branch1:
name: Node 1
branch1-1:
name: Node 1-1
branch2:
name: Node 2
branch2-1:
name: Node 2-1
Run Code Online (Sandbox Code Playgroud)
你安装PyYAML得像这样:
pip install PyYAML
Run Code Online (Sandbox Code Playgroud)
Python代码如下所示:
import yaml
with open('tree.yaml') as f:
# use safe_load instead load
dataMap = yaml.safe_load(f)
Run Code Online (Sandbox Code Playgroud)
该变量dataMap现在包含一个包含树数据的字典.如果您dataMap使用PrettyPrint进行打印,您将获得以下内容:
{'treeroot': {'branch1': {'branch1-1': {'name': 'Node 1-1'},
'name': 'Node 1'},
'branch2': {'branch2-1': {'name': 'Node 2-1'},
'name': 'Node 2'}}}
Run Code Online (Sandbox Code Playgroud)
所以,现在我们已经看到了如何将数据导入我们的Python程序.保存数据同样简单:
with open('newtree.yaml', "w") as f:
yaml.dump(dataMap, f)
Run Code Online (Sandbox Code Playgroud)
你有一个字典,现在你必须将它转换为Python对象:
class Struct:
def __init__(self, **entries):
self.__dict__.update(entries)
Run Code Online (Sandbox Code Playgroud)
然后你可以使用:
>>> args = your YAML dictionary
>>> s = Struct(**args)
>>> s
<__main__.Struct instance at 0x01D6A738>
>>> s...
Run Code Online (Sandbox Code Playgroud)
并按照" 将Python dict转换为对象 "进行操作.
有关更多信息,请查看pyyaml.org和this.
来自http://pyyaml.org/wiki/PyYAMLDocumentation:
add_path_resolver(tag, path, kind)添加基于路径的隐式标记解析程序.路径是形成表示图中节点的路径的键列表.路径元素可以是字符串值,整数或无.节点的类型可以是str,list,dict或None.
#!/usr/bin/env python
import yaml
class Person(yaml.YAMLObject):
yaml_tag = '!person'
def __init__(self, name):
self.name = name
yaml.add_path_resolver('!person', ['Person'], dict)
data = yaml.load("""
Person:
name: XYZ
""")
print data
# {'Person': <__main__.Person object at 0x7f2b251ceb10>}
print data['Person'].name
# XYZ
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
151405 次 |
| 最近记录: |