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