哪种方法读取yaml文件并且具有与ini的读取方法相同的返回?



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

  • 到 .yaml 文件

    stream = file('file.yaml', 'r')    
    return yaml.load(stream) ????
    return yaml.dump(stream) ???? ????
    
  • 到.ini文件

    config = ConfigParser.ConfigParser()    
    config.read('file.ini')
    return config
    

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

ConfigParser.ConfigParser instance at 0x000000000124FE08

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

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

section1:
key1: value1
key2: value2
section2:
key1: value3
key3: value4

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

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.Pathyaml.load

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

最新更新