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

问题描述 投票:1回答:1

我正在开发一个项目,我想将.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
python yaml ini
1个回答
0
投票

既然你做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.loadfrom pathlib import Path file_name = Path('file.yaml') yaml.load(file_name)
  • 可以通过在YAML文件中标记根级别映射并提供适当的标记处理来直接加载到ConfigParser实例中,但我认为这不值得。你可以花更多的时间将程序的其余部分从假设部分更改为直接处理data(两级字典结构)。
© www.soinside.com 2019 - 2024. All rights reserved.