我需要从两个配置文件中的三个不同位置读取某个路径:
/etc/program.conf
~/.config/program/config
本地版块有[DEFAULT]
部分,可能有也可能没有特定于每个案例的部分,例如[case]
。我想
我在Python中使用configparser
。这实际上并不是一个困难的问题,但我提出的解决方案让我感到不雅和笨重。我认为,这是一个相当普遍的情况,我想我会请更多有经验的程序员寻求更好的解决方案。
我的代码是:
def retrieve_download_path(feed):
download_path = os.path.expanduser('~/Downloads')
config = configparser.ConfigParser()
if os.path.isfile(CONFIG_FILENAME_GLOBAL):
config.read(CONFIG_FILENAME_GLOBAL)
if config.has_option('DEFAULT','Download directory'):
download_path = os.path.expanduser(config['DEFAULT']['Download directory'])
if os.path.isfile(CONFIG_FILENAME_USER):
config.read(CONFIG_FILENAME_USER)
if config.has_option(feed,'Download directory'):
download_path = os.path.expanduser(config[feed]['Download directory'])
elif config.has_option('DEFAULT','Download directory'):
download_path = os.path.expanduser(config['DEFAULT']['Download directory'])
return download_path
我怎样才能改善这一点?采购不同配置文件的常用方法是什么?
答案 0 :(得分:1)
configparser
似乎为您要实施的内容提供支持,特别是多个配置文件和DEFAULT
部分。
这样做你想要的吗?
def retrieve_download_path(feed):
# Read the config files.
config = configparser.ConfigParser()
config.read((CONFIG_FILENAME_GLOBAL, CONFIG_FILENAME_USER))
# Resolve the section (configparser doesn't fallback to DEFAULT if the entire section is missing).
section = feed if config.has_section(feed) else config.default_section
# Extract the download path.
download_path = config.get(section, 'Download directory', fallback='~/Downloads')
# Expand the user directory.
return os.path.expanduser(download_path)
我看到的唯一区别是允许(并参考)全局配置文件中的DEFAULT
部分(这似乎是可取的)。