2

そのため、構成ファイル内の辞書を使用して、レポート名を API 呼び出しに保存しようとしています。だから、このようなもの:

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

複数の report:apicalls を 1 つの構成値に保存する必要があります。ConfigObj を使用しています。そこのドキュメントドキュメントを読みましたが、それができるはずだと書かれています。私のコードは次のようになります。

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

ただし、 config= にヒットすると、raise エラーがスローされます。私はここでちょっと迷っています。私は彼らの例と同じこと、「raise error」をコピーして貼り付けました。私はpython27を使用しており、configobjライブラリがインストールされています。

4

4 に答える 4

4

ファイルを使用する義務がない場合は、 のようなオブジェクトINIを処理するのにより適した別のファイル形式を使用することを検討してください。dictあなたが与えたサンプルファイルを見ると、ファイルを使用できJSONます。Pythonには、それを処理するための組み込みモジュールがあります。

例:

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
于 2016-07-03T03:04:58.407 に答える
2

入力として使用されるこの構成ファイルは問題ありません。

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 が使用できるタイプは次のとおりです。

文字列、リスト、タプル
None、True、False
辞書、integer、float
long および複素数

于 2016-07-03T02:08:36.653 に答える
2

構成ファイル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は、

于 2016-07-03T01:19:08.900 に答える