配置文件使用python的字典

时间:2016-07-03 00:54:14

标签: python python-2.7 dictionary config configobj

所以我试图在配置文件中使用字典来存储API调用的报告名称。所以像这样:

report = {'/report1': '/https://apicall...', '/report2': '/https://apicall...'}

我需要存储多个报告:apicalls到一个配置值。我正在使用ConfigObj。我在那里看过documentationdocumentation,它说我应该能够做到。我的代码看起来像这样:

from configobj import ConfigObj
config = ConfigObj('settings.ini', unrepr=True)
for x in config['report']:
    # do something... 
    print x

然而,当它命中config =它会引发加注错误。我有点迷失在这里。我甚至复制并粘贴了他们的例子和同样的东西,#34;提出错误"。我正在使用python27并安装了configobj库。

4 个答案:

答案 0 :(得分:2)

如果您没有义务使用INI文件,您可以考虑使用更适合处理dict的其他文件格式 - 类似对象。查看您提供的示例文件,您可以使用JSON个文件,Python有一个built-in模块来处理它。

示例:

JSON文件“settings.json”:

{"report": {"/report1": "/https://apicall...", "/report2": "/https://apicall..."}}

Python代码:

import json

with open("settings.json") as jsonfile:
    # `json.loads` parses a string in json format
    reports_dict = json.load(jsonfile)
    for report in reports_dict['report']:
        # Will print the dictionary keys
        # '/report1', '/report2'
        print report

答案 1 :(得分:1)

您的配置文件settings.ini应采用以下格式:

[report]
/report1 = /https://apicall...
/report2 = /https://apicall...
from configobj import ConfigObj

config = ConfigObj('settings.ini')
for report, url in config['report'].items():
    print report, url

如果您想使用unrepr=True,则需要

答案 2 :(得分:1)

用作输入的配置文件很好:

report = {'/report1': '/https://apicall...', '/report2': '/https://apicall...'}

此配置文件用作输入

flag = true
report = {'/report1': '/https://apicall...', '/report2': '/https://apicall...'}

生成此异常,看起来就像你得到的那样:

O:\_bats>configobj-test.py
Traceback (most recent call last):
  File "O:\_bats\configobj-test.py", line 43, in <module>
    config = ConfigObj('configobj-test.ini', unrepr=True)
  File "c:\Python27\lib\site-packages\configobj.py", line 1242, in __init__
    self._load(infile, configspec)
  File "c:\Python27\lib\site-packages\configobj.py", line 1332, in _load
    raise error
configobj.UnreprError: Unknown name or type in value at line 1.

设置unrepr模式后,您需要使用有效的Python关键字。在我的示例中,我使用了true而不是True。我猜你在Settings.ini中有其他一些导致异常的设置。

  

unrepr选项允许您使用配置文件存储和检索基本的Python数据类型。它必须使用与普通ConfigObj文件略有不同的语法。不出所料,它使用Python语法。这意味着列表不同(它们用方括号括起来),并且必须引用字符串。

     

unrepr可以使用的类型是:

     

字符串,列表,元组
     无,真,假      字典,整数,浮点数
     多头和复数

答案 3 :(得分:1)

我有一个类似的问题,试图阅读ini文件:

[Section]
Value: {"Min": -0.2 , "Max": 0.2}

使用config parser和json的组合结束:

import ConfigParser
import json
IniRead = ConfigParser.ConfigParser()
IniRead.read('{0}\{1}'.format(config_path, 'config.ini'))
value = json.loads(IniRead.get('Section', 'Value'))

显然,其他文本文件解析器可以用作json加载,只需要json格式的字符串。我遇到的一个问题是字典/ json字符串中的键需要用双引号。