我正在编写一个代码来读取 YAML 文件作为输入。我Loader在yaml.load通话中看到以下选项:BaseLoader, SafeLoader, FullLoader, UnsafeLoader。
这些选项有什么作用?如以下文档页面所述,加载完整的 YAML 语言意味着什么?
https://github.com/yaml/pyyaml/wiki/PyYAML-yaml.load(input)-Deprecation
在 PyYAML 中,您调用以加载 YAML 的接口是基于函数的 (the load) 函数。
将 YAML 文件中的文本转换为 Python 对象、扫描、解析、组合和构造的不同阶段的实现被实现为 PyYAML 使用组合将其组合到loader 中的类。
有不同的加载器,主要是因为有不同的构造函数。例如,加载器的安全版本将使用安全构造函数,它不会创建任意的 Python 对象,基本加载器只加载字符串(而不是整数、浮点数、布尔值、日期)等。
在 PyYAML 中,您不会创建要使用的特定加载器的实例,然后调用其方法之一(或将参数传递给初始化)。相反,您将要创建的对象类型(即它的类)load()作为Loader参数传递给函数。还有一些实用功能,例如unsafe_load()本质上 doload(..., Loader=BaseLoader,...)等,适合您。
请注意,因此,除了构建的实际数据之外,很难从加载过程中获取任何值(假设您对扫描仪丢弃的评论数量感兴趣):很容易将扫描器并添加功能,但是您需要制作一个与此扫描器组合在一起的替代加载器,然后在load(..., Loader=YourLoader)调用结束时它YourLoader消失了,因此您无法获得添加到扫描器(或解析器、作曲家、构造函数)的任何属性) 实例来存储信息。
上面描述的是纯 Python 版本,基于 C 的加载器对于扫描器/解析器的工作方式略有不同。
| 归档时间: |
|
| 查看次数: |
2674 次 |
| 最近记录: |