在Python中将YAML转换为字符串

在Python中将YAML转换为字符串,python,yaml,Python,Yaml,我正在尝试将yaml文件转换为特定格式。YAML文件如下所示: treeroot: branch1: name: 1 branch1-1: name: 2 branch2: name: 3 branch2-1: name: 4 我想将上述文件作为输入,并以以下格式打印输出: system.treeroot.branch1.name 1 system.treeroot.

我正在尝试将yaml文件转换为特定格式。YAML文件如下所示:

treeroot:
    branch1:
        name: 1
        branch1-1:
            name: 2
    branch2:
        name: 3
        branch2-1:
            name: 4
我想将上述文件作为输入,并以以下格式打印输出:

system.treeroot.branch1.name 1
system.treeroot.branch1.branch1-1.name 2
system.treeroot.branch2.name 3
system.treeroot.branch2.branch2-1.name 4
以下是我编写的代码:

#!/usr/bin/python

import yaml
m = "system"
def main():
    yaml_data = yaml.load(open('test.yaml'))
    recurse(yaml_data)

def recurse(yaml_data):
    for k,v in yaml_data.iteritems():
        global m
        if type(v) == type({}):
            m = m + "." + k
            recurse(v)
        else:
            m = m + "." + k
            print str(m)+" "+str(v)

if __name__ == "__main__":
    main()
但是这个代码打印的输出是这样的:

system.treeroot.branch2.branch2-1.name 4
system.treeroot.branch2.branch2-1.name.name 3
system.treeroot.branch2.branch2-1.name.name.branch1.branch1-1.name 2
system.treeroot.branch2.branch2-1.name.name.branch1.branch1-1.name.name 1

如何解决此问题?

首先,关于样式的说明,最好使用
isinstance
而不是直接比较类型,即如果isinstance(v,dict):

如果让函数接受两个参数,而不是试图摆弄全局
m
,则应该解决问题

def recurse(yaml_data, m):
    for k,v in yaml_data.iteritems():
        if isinstance(v, dict):
            # m = m + "." + k
            recurse(v, m + "." + k)
        else:
            m = m + "." + k
            print str(m)+ " " +str(v)

# In [4]: recurse(yaml_data, 'system')
# system.treeroot.branch2.branch2-1.name 4
# system.treeroot.branch2.name 3
# system.treeroot.branch1.branch1-1.name 2
# system.treeroot.branch1.name 1

谢谢你的快速回复。但产出仍然不同。我希望输出为
system.treeroot.branch1.name 1
system.treeroot.branch1.branch1-1.name 2
system.treeroot.branch2.name 3
system.treeroot.branch2.branch2-1.name 4
@pradeepchhetri对此表示抱歉。请参阅我的编辑。这个问题与您之前的错误类似,我在函数中重新分配了
m