Python ConfigParser .ini 解析和可移植变量替换

问题描述 投票:0回答:1

我想要一个引用特殊变量的

.ini
条目 例如

[magic_module]
magic_directory: ${env:PWD}/magic

目前我有非便携式

[magic_module]
magic_directory: C:/Users/user1/projects/project1/magic

我想要一个更便携的

.ini
路径条目,而不是硬编码到我的计算机上。 Python
ConfigParser
本身会执行这样的替换吗?


这与SO问题ConfigParser和带有环境变量的字符串插值略有不同,因为我想知道任何可能的默认插值变量,而不仅仅是环境变量。

这是为了将信息传递到使用

mypy
的不同模块 (
ConfigParser
)。

具体来说,这是为了提高 Python 包的可移植性。我试图在使用 pipelinev 创建的 virtualenv python 环境时在 mypy_path

 中设置 
mypy.ini
。用户安装模块路径将会改变,所以我想为
mypy
进行可移植的设置。

使用Python 3.7。

python pipenv mypy python-config
1个回答
0
投票

通过将参数值

interpolation
设置为类
ExtendedInterpolation
的实例,您可以实现您的目标。请参阅下面的示例:

样本.ini

在以下示例中,我通过插值引用 Windows 开箱即用环境变量

TEMP

[magic_module]
magic_directory: ${WINDIR}/magic

[another_section]
another_directory=${magic_module:magic_directory}\folder1\folder2

主.py

import configparser
import os

def display_setting(config: configparser.ConfigParser,section: str, key: str):
    value=config.get(section, key)
    print(f"Value of {section}:{key}={value}")

print("Begin....")
config = configparser.ConfigParser(os.environ, interpolation=configparser.ExtendedInterpolation())
sample_ini_file=os.path.join(os.path.dirname(__file__),"sample.ini")
print(f"Going to load the INI file {sample_ini_file}")
config.read(sample_ini_file)

display_setting(config=config, section="magic_module", key="magic_directory")
display_setting(config=config, section="another_section", key="another_directory")


输出

Begin....
Going to load the INI file C:\work\sample.ini   
Value of magic_module:magic_directory=C:\WINDOWS/magic
Value of another_section:another_directory=C:\WINDOWS/magic\folder1\folder2


文档链接

https://docs.python.org/3/library/configparser.html

© www.soinside.com 2019 - 2024. All rights reserved.