另一个配置分析器。

konfig的Python项目详细描述


另一个配置对象。与更新的configparser兼容。

travisCoverage

用法

>>>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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java接口中的每个方法都是抽象的,但在抽象类中,我们也只能使用抽象方法   初始化Java中声明的、未初始化的变量会发生什么情况?   java BouncyCastle openPGP将字节[]数组加密为csv文件   在Java中将类A(和所有子类)映射到类B的实例的字典   RSA公钥编码,在Java和Android中,代码相同,结果不同   java在安卓中实现数字检测语音识别   java取消选择复选框   java如何在其他配置中重用Maven配置XML片段   java有没有一种有效的方法来检查HashMap是否包含映射到相同值的键?   spring处理程序调度失败;嵌套的例外是java。lang.NoClassDefFoundError:org/apache/http/client/HttpClient   带有ehcache的java多层缓存   java如何访问chromium(或任何其他浏览器)cookie   java通过将两个集合与spring data mongodb data中的条件合并来获取计数   安卓中R.java的语法错误