哪种方法读取yaml文件并与ini的读取方法返回相同的结果?

2024-04-24 22:01:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个项目,我想把.ini配置文件改成.yaml。在一个函数中,我在读取.ini文件之前有一个return,现在我希望它有相同的返回类型,但返回到.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

Tags: 文件项目函数configyaml类型readstream
1条回答
网友
1楼 · 发布于 2024-04-24 22:01:31

既然你做了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(两级字典)的部分 结构)直接。

相关问题 更多 >