链式文件句柄的 YAML 加载

YAML load for chained file handles

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'

我做错了什么?我要完成的任务有简单的解决方案吗?

我假设 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 字典相同的结果...