在python中使用通配符加载yaml文件

时间:2015-02-27 07:50:33

标签: python python-2.7 pyyaml

我想打开文件夹中的所有* .yaml文件并使用PyYaml加载它们。每个文件包含一个yaml文档。 我最近的代码片段:

stream = open("conf.d/*.yaml", 'r')
config = yaml.load_all(stream)

这失败了,因为yaml.open显然无法使用通配符:

stream = open("conf.d/*.yaml", 'r')
IOError: [Errno 2] No such file or directory: 'conf.d/*.yaml'

归档此目标的正确方法如何?

1 个答案:

答案 0 :(得分:2)

在Python 2.5+中可以使用glob模块将通配符扩展为文件名列表。

>>> import glob
>>> a = glob.glob("*.yaml")
>>> print a
['test1.yaml', 'test2.yaml', 'test3.yaml']

然后,您可以将其提供给map()之类的迭代器,以生成PyYAML配置生成器列表。

>>> import yaml
>>> import glob
>>> configs = map(lambda x: yaml.load_all(open(x)), glob.glob("*.yaml"))
>>> print configs
[<generator object load_all at 0x1078bfe10>, <generator object load_all at 0x1078bfd20>, <generator object load_all at 0x1078bfb90>]
>>> for config in configs:
...     for item in config:
...         print item
... 
{'date': datetime.date(2015, 2, 27), 'customer': {'given': 'Gordon', 'family': 'Jeff'}, 'location': 'Target'}
{'date': datetime.date(2015, 2, 25), 'customer': {'given': 'Earnhardt', 'family': 'Dale'}, 'location': 'Walmart'}
{'date': datetime.date(2015, 2, 23), 'customer': {'given': 'Petty', 'family': 'Richard'}, 'location': 'Target'}