私は、INIファイルをPythonオブジェクトとしてマップしたいと思います。だから、ファイルが持っている場合:マップINI値に__setattr__&__getattr__を使用する方法は?
[UserOptions]
SampleFile = sample.txt
SamplePort = 80
SampleInt = 1
Sample = Aja
SampleDate = 10/02/2008
それから私がしたい:
c = Configuration('sample.ini')
c.UserOptions.SamplePort = 90
私は SETATTR を探していますが、私は再帰エラーが発生します。
これは私が持っているものです。self.__parser.set('UserOptions',item, value)
に私はエラーを取得する理由
class Configuration:
def __init__ (self, fileName):
cp = SafeConfigParser()
cp.read(fileName)
self.__parser = cp
self.fileName = fileName
def __getattr__ (self, name):
if name in self.__parser.sections():
return Section(name, self.__parser)
else:
return None
def __str__ (self):
p = self.__parser
result = []
result.append('<Configuration from %s>' % self.fileName)
for s in p.sections():
result.append('[%s]' % s)
for o in p.options(s):
result.append('%s=%s' % (o, p.get(s, o)))
return '\n'.join(result)
class Section:
def __init__ (self, name, parser):
self.__name = name
self.__parser = parser
def __getattr__ (self, name):
if self.__dict__.has_key(name): # any normal attributes are handled normally
return __getattr__(self, item)
else:
return self.__parser.get(self.name, name)
def __setattr__(self, item, value):
"""Maps attributes to values.
Only if we are initialised
"""
if self.__dict__.has_key(item): # any normal attributes are handled normally
dict.__setattr__(self, item, value)
else:
self.__parser.set('UserOptions',item, value)
は今、私は疑問に思います。私は秘書の文書を読み、私は何をすべきか分からない。私は、フィールド名と最初の外観を持つ辞書を格納する必要があると思うが、どのように?
組み込みの設定パーサーを使用していないのはなぜですか? http://docs.python.org/library/configparser.html –
私は使用していますが、インポート行を挿入するのを忘れています... – mamcx