哪个方法读取yaml文件和ini的读取方法相同return?

Which method to read yaml file and have the same return of the read method of ini?

我正在做一个项目,我想将 .ini 配置文件更改为 .yaml。在一个函数中,我在读取 .ini 文件之前有 return,现在我希望它具有与 .yaml 文件相同的 return 类型。我该怎么做呢? 有人可以向我解释一下这是什么类型的 return 吗?

如果我打印 config,我有这个:

ConfigParser.ConfigParser instance at 0x000000000124FE08

既然你做了config = ConfigParser.ConfigParser(),那是肯定的 config 是一个 ConfigParser 实例。那有各种特殊的方法等等 您的程序将假定能够调用。

如果您不想更改程序的其余部分,您应该设置 YAML 配置文件 在根部有一个映射,其键是 INI 文件中的部分名称, 并且值再次映射表示每个部分的键值对:

section1:
  key1: value1
  key2: value2

section2:
  key1: value3
  key3: value4

然后加载该 YAML 文件并将生成的数据结构转换为 ConfigParser 实例 然后您可以将其用作从 INI 文件读取的 ConfigParser:

import sys
import ruamel.yaml
from configparser import ConfigParser


yaml = ruamel.yaml.YAML(typ='safe')
with open('file.yaml', 'r') as stream:
    data = yaml.load(stream)

config = ConfigParser()
config.read_dict(data)
config.write(sys.stdout)

给出:

[section1]
key1 = value1
key2 = value2

[section2]
key1 = value3
key3 = value4

因此 config(假设您的 file.yaml 有意义),可以传递给程序的其余部分。

请注意:

  • config.write() 只是为了显示结果是一个 ConfigParser 实例, 在最后的程序中你不需要那个。
  • 您的 YAML 加载示例不会关闭输入流,这不是好的做法。使用 with 语句或将 pathlib.Path 传递给 yaml.load:

    from pathlib import Path
    file_name = Path('file.yaml')
    yaml.load(file_name)
    
  • 可以直接加载到ConfigParser实例中 在 YAML 文件中标记根级别映射并提供 适当的标签处理,但我认为这不值得。您的 把时间花在改变程序的其余部分上会更好 假设部分处理 data (二级字典 结构)。