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