我想打开文件夹中的所有* .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'
归档此目标的正确方法如何?
答案 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'}