链接文件句柄的YAML加载

Dan*_*age 2 python yaml python-itertools

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

config = yaml.load(open('myconfig.yml', 'r'))
Run Code Online (Sandbox Code Playgroud)

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

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

但是,这会导致异常.

AttributeError: 'itertools.chain' object has no attribute 'read'
Run Code Online (Sandbox Code Playgroud)

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

Cyr*_*bil 5

我假设loading them together手段要么全部读取,要么合并它们:

全部阅读

yamls = []
for filename in filelist:
    with open(filename) as f:
        yamls.append(yaml.load(f))
Run Code Online (Sandbox Code Playgroud)

将它们合并

yamls = {}
for filename in filelist:
    with open(filename) as f:
        yamls.update(yaml.load(f))
Run Code Online (Sandbox Code Playgroud)

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

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

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

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