另一个配置分析器。
konfig的Python项目详细描述
另一个配置对象。与更新的configparser兼容。
用法
>>>fromkonfigimportConfig>>>c=Config('myconfig.ini')
然后读取api的configparser’s documentation。
konfig作为一些额外的api,比如as_args(),它将返回 作为argparse兼容参数的配置文件:
>>> c.as_args() ['--other-stuff', '10', '--httpd', '--statsd-endpoint', 'http://ok']
对于自动筛选,还可以传递argparse解析器对象 到scan_args()。我将重复您在 解析器并在配置文件中查找它们,然后返回参数列表 就像as_args()。你可以直接使用这个列表 使用parser.parse_args()-或使用sys.argv或其他工具完成它。
>>> import argparse >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--log-level', dest='loglevel') >>> parser.add_argument('--log-output', dest='logoutput') >>> parser.add_argument('--daemon', dest='daemonize', action='store_true')>>> config = Config('myconfig.ini') >>> args_from_config = config.scan_args(parser)>>> parser.parse_args(args=sys.argv[1:]+args_from_config)
语法定义
配置文件是基于ini的文件。(见 http://en.wikipedia.org/wiki/INI_file了解更多详细信息。)变量名可以是 分配值,并分组到节中。以“”开头的行是 发表了评论。空行也被删除。
示例:
[section1]# commentname=valuename2="other value"[section2]foo=bar
python、php和其他语言的ini阅读器理解这种语法。 尽管如此,它们在解释价值观和 特别是如果/如何转换它们。
值转换
下面是一组转换值的规则:
- 如果值用“chars”引起来,它就是一个字符串。这个符号对 在值中包含“=”字符。如果值包含“字符, 它必须用“”字符转义。
- 当该值由数字组成并可选地以“-”作为前缀时,它是 暂时转换为整数或长,具体取决于语言。如果 数字超出了语言的可用范围,它保留为字符串。
- 如果值为“true”或“false”,则将其转换为布尔值,或0和1 当语言没有布尔类型时。
- 值可以是环境变量:“${var}”替换为 如果在环境中发现,则为var。如果找不到变量,则必须 提高。
- 一个值可以包含多行。读取时,行将转换为 价值序列。多行值的每一新行必须以 至少一个空格或制表符。
示例:
[section1]# commenta_flag=Truea_number=1a_string="other=value"another_string=other valuea_list=one two threeuser=${USERNAME}
扩展文件
INI文件可以扩展另一个文件。为此,“默认”部分必须包含 一个“extends”变量,可以指向一个或多个ini文件 通过添加新的节和值合并到当前文件。
如果“extends”中指向的文件包含已经 存在于原始文件中,它们不会覆盖现有文件。
下面是一个示例:您有一个公共配置文件,希望保留一些数据库 密码保密。您可以将这些密码保存在单独的文件中。
public.ini:
[database]user=tarekpassword=PUBLIC[section2]foo=bazbas=bar
然后在private.ini中:
[DEFAULT]extends=public.ini[database]password=secret
现在如果您使用private.ini您将获得:
[database]user=tarekpassword=secret[section2]foo=bazbas=bar
要指向多个文件,可以使用多行符号:
[DEFAULT]extends=public1.ini public2.ini
当提供多个文件时,它们将按顺序处理。所以如果 第一个值也存在于第二个值中,第二个值将 被忽视。这意味着配置从最专业的 最常见的。
覆盖模式
如果要扩展文件并重写现有值, 您可以使用“覆盖”而不是“扩展”。
这里有一个例子。文件2.ini:
[section1]name2="other value"[section2]foo=bazbas=bar
文件1.ini:
[DEFAULT]overrides=file2.ini[section2]foo=bar
如果使用file1.ini:
[section1]name2="other value"[section2]foo=bazbas=bar
在Section2中,注意foo现在是baz。