3

標準の ConfigParser ライブラリの RawConfigParser を使用して読み取る構成ファイルがあります。私の構成ファイルには [DEFAULT] セクションがあり、その後に [specific] セクションが続きます。[specific] セクションのオプションをループすると、[DEFAULT] の下にあるオプションが含まれます。これは、意図したとおりです。

ただし、レポートのために、オプションが [specific] セクションまたは [DEFAULT] で設定されているかどうかを知りたいと思いました。RawConfigParser のインターフェイスでそれを行う方法はありますか、それともファイルを手動で解析する以外に選択肢はありませんか? (私は少し探しましたが、最悪の事態を恐れ始めています...)

例えば

[デフォルト]

名前=あ

姓 = b

[セクション]

名前 = b

年齢 = 23

オプション name と surname がセクション [DEFAULT] またはセクション [SECTION] からロードされているかどうか、RawConfigParser インターフェイスを使用してどのように知ることができますか?

([DEFAULT] がすべてに適用されることを意図していることはわかっていますが、複雑な構成ファイルを処理するために、このようなことを内部的に報告することをお勧めします)

ありがとう!

4

3 に答える 3

5

私は最近、オプションを辞書にしてから、辞書をマージすることでこれを行いました。これの優れた点は、ユーザー パラメーターがデフォルトをオーバーライドし、それらすべてを関数に簡単に渡すことができることです。

import ConfigParser
config = ConfigParser.ConfigParser()
config.read('config.ini')

defaultparam = {k:v for k,v in config.items('DEFAULT')}
userparam = {k:v for k,v in config.items('Section 1')}

mergedparam = dict(defaultparam.items() + userparam.items())
于 2012-11-20T10:25:57.830 に答える
2

この構成ファイルを考えると:

[DEFAULT]
name = a
surname = b

[Section 1]
name  = section 1 name
age = 23
#we should get a surname value from defaults

[Section 2]
name = section 2 name
surname = section 2 surname
age = 24

セクション 1 がデフォルトの姓プロパティを使用していることを理解できるプログラムを次に示します。

import ConfigParser

parser = ConfigParser.RawConfigParser()
parser.read("config.ini")
#Do your normal config processing here
#When it comes time to audit default vs. explicit,
#clear the defaults
parser._defaults = {}
#Now you will see which options were explicitly defined
print parser.options("Section 1")
print parser.options("Section 2")

出力は次のとおりです。

['age', 'name']
['age', 'surname', 'name']
于 2010-03-16T03:06:23.570 に答える
0

RawConfigParser.has_option(section, option)仕事をしませんか?

于 2010-02-22T13:36:03.787 に答える