yaml.load()函数中的loader选项是什么意思

时间:2019-12-11 04:05:56

标签: yaml pyyaml

我正在编写代码以读取YAML文件作为输入。在Loader调用中,我看到以下选项为yaml.load

BaseLoaderSafeLoaderFullLoaderUnsafeLoader

这些选项的作用。如文档中所述,加载完整的YAML语言是什么意思?

https://github.com/yaml/pyyaml/wiki/PyYAML-yaml.load(input)-Deprecation

1 个答案:

答案 0 :(得分:0)

在PyYAML中,您调用的用于加载YAML的接口是基于函数(load)的函数。

将YAML文件中的文本转换为Python对象,扫描解析撰写的不同阶段的实现构造作为类实现,PyYAML使用组成将它们组合到 loader 中。

有不同的加载器,主要是因为有不同的构造函数。例如。安全的加载程序版本将使用安全的构造函数,该构造函数将不会创建任意的Python对象,基本的加载程序仅加载字符串(而不是整数,浮点数,布尔值,日期)等。

在PyYAML中,不要创建要使用的特定加载器的实例,然后调用其方法之一(或将参数传递给初始化)。而是将要创建的对象类型(即其类)传递给load()函数作为Loader参数。还有一些实用程序功能,例如unsafe_load()可以为您完成load(..., Loader=BaseLoader,...)等。


请注意,因此,除了构造的实际数据外,很难从加载过程中获取任何价值(假设您对扫描仪丢弃的注释数量感兴趣):这很容易来归类扫描器并添加功能,但是您需要制作一个与此扫描器组成自身的备用加载器,然后在load(..., Loader=YourLoader)调用结束时YourLoader消失了,因此您无法使用您添加到扫描仪(或解析器,作曲器,构造函数)实例中的属性以存储信息。

上面描述的是纯Python版本,基于C的加载器在扫描器/解析器上的工作略有不同。

相关问题