Python 3.x 是否可以在解析期间将ConfigParser选项转换为类型?
使用实例时,可以通过其Python 3.x 是否可以在解析期间将ConfigParser选项转换为类型?,python-3.x,jinja2,Python 3.x,Jinja2,使用实例时,可以通过其getint、getfloat和getboolean方法将选项显式转换为类型。通过为构造函数的converters命名参数传递适当的值,可以扩展受支持类型的列表 所以显式很好地工作 现在考虑下面的脚本,包含一个 .ini >代码>文件和一个jja2模板内联: #!/usr/bin/env python3 import sys assert sys.version_info[:2] >= (3, 5), "Need at least Python 3.5" from c
getint
、getfloat
和getboolean
方法将选项显式转换为类型。通过为构造函数的converters
命名参数传递适当的值,可以扩展受支持类型的列表
所以显式很好地工作
现在考虑下面的脚本,包含一个<代码> .ini >代码>文件和一个jja2模板内联:
#!/usr/bin/env python3
import sys
assert sys.version_info[:2] >= (3, 5), "Need at least Python 3.5"
from configparser import ConfigParser
from io import StringIO
from jinja2 import Template
INI_FILE = """\
[section]
option1 = yes
option2 = no"""
TPL_FILE = """\
From loop:
{% for opt in cfg.options("section") -%}
{{ opt }} = {{ cfg.get("section", opt) }}
{% endfor -%}
Directly:
option1 = {{ cfg.section.option1 }}
option2 = {{ cfg.section.option2 }}
real true = {{ realt }}
real false = {{ realf }}
"""
if __name__ == "__main__":
cfg = ConfigParser()
cfgfile = StringIO(INI_FILE)
cfg.read_file(cfgfile)
# cfg["section"]["option3"] = True <- must be string
# cfg["section"]["option4"] = False <- ditto
tpl = Template(TPL_FILE)
print(tpl.render(cfg=cfg, realt=True, realf=False))
现在,我如何实现每当访问option1
和option2
时,它们都被视为布尔值,就像我分别在名称realt
和realf
下传递的布尔值一样
ConfigParser
似乎将所有内容都视为字符串
我看到两种方法来实现我想要的
ConfigParser
,并以某种方式实现此行为ConfigParser
中的代码自动更改,因此实现可能会出现分歧);方法2最终可能会在几个地方复制信息,我想知道Python的电池包含方法是否包含了我所缺少的内容
如何使
获取
,设置
和设置项
,获取项
了解配置解析器
支持的标准类型(int
,float
,boolean
)?这里我还缺少哪些其他方法?目前,我正在接受一个定制的Jinja2过滤器,它接受字符串值作为输入,并使用ConfigParser
将其解析为布尔值。不过,我觉得这很难看,我还是希望其他人能给我一个更好的答案
def my_filter(optvalue):
assert isinstance(optvalue, str), "We expect only string values as input from ConfigParser"
from configparser import ConfigParser, DEFAULTSECT
cfg = ConfigParser()
cfg.read_string("[%s]\n%s = %s\n" % (DEFAULTSECT, DEFAULTSECT, optvalue))
return cfg.getboolean(DEFAULTSECT, DEFAULTSECT)
我现在可以这样做(假设过滤器注册为asbool
):
。。。或在以下情况下:
{% if cfg.section.option2|asbool %}
something ...
{% endif %}
目前,我正在接受一个定制的Jinja2过滤器,它接受一个字符串值作为输入,并使用
ConfigParser
将其解析为布尔值。不过,我觉得这很难看,我还是希望其他人能给我一个更好的答案
def my_filter(optvalue):
assert isinstance(optvalue, str), "We expect only string values as input from ConfigParser"
from configparser import ConfigParser, DEFAULTSECT
cfg = ConfigParser()
cfg.read_string("[%s]\n%s = %s\n" % (DEFAULTSECT, DEFAULTSECT, optvalue))
return cfg.getboolean(DEFAULTSECT, DEFAULTSECT)
我现在可以这样做(假设过滤器注册为asbool
):
。。。或在以下情况下:
{% if cfg.section.option2|asbool %}
something ...
{% endif %}