0

構成ファイルから取得して別の変数に保存したい 15 個の値があります。

私は使っている

from ConfigParser import SafeConfigParser

parser = SafeConfigParser()
parser.read(configFile)

そしてそれは本当に良い図書館です。

オプション1

変数の名前を変更し、構成ファイルのエントリと一致させたい場合は、関数の対応する行を編集する必要があります

def fromConfig():
    #open file
    localOne = parser.get(section, 'one')
    localTwo = parser.get(section, 'two')
    return one, two

one = ''
two = ''
#etc
one, two = fromConfig()

オプション #2

変数がどこから値を取得するかを確認する方がわかりやすいですが、変数ごとにファイルを開いたり閉じたりすることになります

def getValueFromConfigFile(option):
    #open file
    value = parser.get(section, option)
    return value

one = getValueFromConfigFile("one")
two = getValueFromConfigFile("two")

オプション #3

すべての変数名の別のリストが必要なので、これはあまり意味がありませんが、関数はよりクリーンです。

def getValuesFromConfigFile(options):
    #open file
    values = []
    for option in options:
        values.append(parser.get(section, option))

    return values

one = ''
two = ''
configList = ["one", "two"]
one, two = getValuesFromConfigFile(configList)

編集: これは、ファイル1を読み取り、すべての値をdictに保存してから、値を使用しようとする私の試みです。複数行の文字列があり、使用しています

%(nl)s to be a new line character so then when I get the value 
message = parser.get(section, 'message', vars={'nl':'\n'})

これが私のコードです:

from ConfigParser import SafeConfigParser

def getValuesFromConfigFile(configFile):
    ''' reads a single section of a config file as a dict '''
    parser = SafeConfigParser()
    parser.read(configFile)
    section = parser.sections()[0]

    options = dict(parser.items(section))

    return options


options = getValuesFromConfigFile(configFile)

one = options["one"]
4

3 に答える 3

2

単一のセクションから辞書として値を取得するには:

options = dict(parser.items(section))

通常どおり個々の値にアクセスできます: options["one"], options["two"]. Python 3.2+ では、configparser はそれ自体で dict のようなアクセスを提供します。

柔軟性のために、さまざまなソース形式からの構成の更新をサポートし、構成管理を一元化します。構成変数への解析/アクセスをカプセル化するカスタム クラスを定義できます。

class Config(object):
    # ..    
    def update_from_ini(self, inifile):
        # read file..
        self.__dict__.update(parser.items(section))

この場合、個々の値はインスタンス属性として使用できます: config.oneconfig.two.

于 2013-02-04T22:28:44.860 に答える
1

解決策は、物事を非常に簡単かつ再利用可能にする辞書とjsonを使用することでもあります

import json

def saveJson(fName, data):
    f = open(fName, "w+")
    f.write(json.dumps(data, indent=4))
    f.close()

def loadJson(fName):
    f = open(fName, "r")
    data = json.loads(f.read())
    f.close()
    return data

mySettings = {
    "one": "bla",
    "two": "blabla"
}

saveJson("mySettings.json", mySettings)
myMoadedSettings = loadJson("mySettings.json")

print myMoadedSettings["two"]
于 2013-02-04T21:59:07.367 に答える
0

可能な解決策として:

module_variables = globals() # represents the current global symbol table
for name in ('one', 'two'):
    module_variables[name] = parser.get(section, name)
print one, two
于 2013-02-04T21:19:47.423 に答える