将 yaml 文件保存到生成器对象到字典 python



我将 YAML 文件保存到 python 字典时遇到很多问题。我将在下面显示我采取的两条路线,都是次优的。

雅姆尔文件:

modules:
module_1: True
module_2: True
module_3: False
scenarios:
constant:
start_date: "2018-09-30"
end_date: "2019-09-30"
adverse:
start_date: "2019-09-30"
end_date: "2022-09-30"

路线 1:将 YAML 文件直接保存到字典,而不指定现已弃用的加载程序

import yaml
filepath = "C:\user\path\file.yaml"
_dict = yaml.load(open(filepath))
print(type(_dict))
>>> <class 'dict'>
error message: Calling yaml.load() without loader=... is depreciated, as it is unsafe

路线 2:作为生成器加载(不可下标(

import yaml
filepath = "C:\user\path\file.yaml"
document = open(filepath, "r")
dictionary = yaml.safe_load_all(document)
print(type(dictionary)
>>> <generator object>
print(dictionary["modules"]["module_1"]
>>> generator object is not subscriptable

有没有办法将我的 yaml 文件安全地导入字典?我希望在我的 python 项目中使用字典,而不是创建全局变量等。

例:

if _dict["modules"]["module_1"]:
# Do something

只有没有加载程序的调用才被降级。您始终可以将安全加载程序传递给加载函数。

import yaml
with open(filepath, 'r') as stream:
dictionary = yaml.load(stream, Loader=yaml.SafeLoader)

这应该返回您的字典。

编辑:

至于yaml.safe_load_all,你只需要调用generator.__next__()就可以获取字典。

import yaml
filepath = "C:\user\path\file.yaml"
document = open(filepath, "r")
generator = yaml.safe_load_all(document)
dictionary = generator.__next__()

我会推荐第一个选项供您使用。

最新更新