gpt4 book ai didi

python - 如何在 Python 中加载配置文件并能够使用点表示法(属性)访问值?

转载 作者:太空宇宙 更新时间:2023-11-04 01:35:56 25 4
gpt4 key购买 nike

我正在寻找一个允许我使用配置文件数据属性的解决方案。

我希望能够做这样的事情:

config = Config('config.ini')
print config.section1.user
print config.section2.password

我知道 ConfigParser 会允许我做一些像 config['section1']['user'] 但那太难看了,我们不能做得更好吗?

该解决方案必须使用 Python 2.5 或更新版本。

最佳答案

它并不难看,而是更好 - 点表示法意味着在另一个自定义类的对象中可能有一些自定义类的对象。更可行的方法是使用字典(使用括号表示法)。

但如果你坚持,你或许可以这样翻译代码:

def config2object(config):
"""
Convert dictionary into instance allowing access to dictionary keys using
dot notation (attributes).
"""
class ConfigObject(dict):
"""
Represents configuration options' group, works like a dict
"""
def __init__(self, *args, **kwargs):
dict.__init__(self, *args, **kwargs)
def __getattr__(self, name):
return self[name]
def __setattr__(self, name, val):
self[name] = val
if isinstance(config, dict):
result = ConfigObject()
for key in config:
result[key] = config2object(config[key])
return result
else:
return config

并且测试显示了预期的结果:

>>> c1 = {
'conf1': {
'key1': 'aaa',
'key2': 12321,
'key3': False,
},
'conf2': 'bbbb',
}
>>> c1
{'conf2': 'bbbb', 'conf1': {'key3': False, 'key2': 12321, 'key1': 'aaa'}}
>>> c2 = config2object(c1)
>>> c2.conf1
{'key3': False, 'key2': 12321, 'key1': 'aaa'}
>>> c2.conf1.key1
'aaa'
>>> c2.conf1.key3
False
>>> c2.conf2
'bbbb'

编辑:Sven Marnach 指出Config('config.ini') 是一些自定义类实例。它不是字典,它有一些非常有用的自定义方法,但可能会使某些配置选项无法访问(当存在名称冲突时)。因此,首选方法不是使用我提到的解决方案,而是使用括号表示法来访问配置选项。

关于python - 如何在 Python 中加载配置文件并能够使用点表示法(属性)访问值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9773982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com