链接文件句柄的YAML加载

时间:2015-10-30 14:10:26

标签: python yaml itertools

PyYAML使得加载.yml文档变得微不足道。

config = yaml.load(open('myconfig.yml', 'r'))

我有一个YAML文件名列表filelist,我正在尝试用简洁的Pythonic方法将它们加载在一起(将它们视为单个文档)。这就是我的尝试。

fhlist = [open(filename, 'r') for filename in filelist]
cfginput = itertools.chain(*fhlist)
config = yaml.load(cfginput)

然而,这导致了例外。

AttributeError: 'itertools.chain' object has no attribute 'read'

我做错了什么?我正在努力完成的任务有一个简单的解决方案吗?

1 个答案:

答案 0 :(得分:5)

我认为loading them together表示要么全部读取,要么合并它们:

全部阅读

yamls = []
for filename in filelist:
    with open(filename) as f:
        yamls.append(yaml.load(f))

合并所有

yamls = {}
for filename in filelist:
    with open(filename) as f:
        yamls.update(yaml.load(f))

注意:这将覆盖具有相同键的属性,并且不是递归的。

编辑:如果你想连接所有文件并在yaml之后阅读它们:

content = ''
for filename in filelist:
    with open(filename) as f:
        content += f.read()
result = yaml.load(content)

这可能会得到与合并yaml dicts相同的结果......