我有一系列yaml文件,希望能够加载并将它们的内容返回到一个字典中。
最简单的方法是通过循环遍历文件名,并使用safe_load
逐个加载,然后合并结果字典。
不过,我想知道Python的yaml库是否已经具备了这种功能。我看到有load_all
和safe_load_all
方法,但它们仍然只接受一个流,所以我不确定是否或如何使用它们。
PyYaml
库,您可以将其视为包含多个 yaml 文档的字符串(或文件),例如下面这个例子:field1: foo
field2: bar
---
field1: baz
field2: qux
field3: fred
---
field4: fred
load_all
(或safe_load_all
)来处理多个文件中拆分的多个文档,您需要以某种形式将它们连接起来。 函数load_all
本身不能直接从文件夹中一次读取多个文件。read()
方法,然后逐个使用yaml.load
进行处理。\n---\n
分隔文档),然后使用yaml.load_all
进行处理。yaml.load_all
。yaml.load_all
向您返回一个生成器。 迭代此生成器会为您带来每个---
之间的每个文档的字典
。 您可以通过将第一个字典分配给变量,然后对生成器内的每个下一个字典调用.update()
方法来实现合并。gen = yaml.load_all(string)
starting_dict = next(gen)
for d in gen:
starting_dict.update(d)
load_all
和safe_load_all
方法将返回一个文档列表。如果您想要多个文件的相同结果,只需将每个文件附加到列表中即可。如果您想要一个单独的字典,您需要确定合并策略(所有输入文件是否相关?合并它们是否有意义?在出现冲突键时应该发生什么?) - larsks