链式文件句柄的 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 字典相同的结果...
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 字典相同的结果...