Ich möchte eine INI-Datei als ein Python-Objekt zuordnen. Also, wenn die Datei haben:Wie __setattr__ & __getattr__ für Map-INI-Werte verwenden?
[UserOptions]
SampleFile = sample.txt
SamplePort = 80
SampleInt = 1
Sample = Aja
SampleDate = 10/02/2008
Dann ich will:
c = Configuration('sample.ini')
c.UserOptions.SamplePort = 90
Ich bin auf der Suche nach setattr aber ich bekomme einen Rekursionsfehlers. Diese
ist, was ich habe:
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)
Jetzt frage ich mich, warum in self.__parser.set('UserOptions',item, value)
ich den Fehler. Ich lese in den Pythons und ich verstehe nicht, was ich tun soll. Ich vermute, dass ich ein Diktat mit dem Feldnamen speichern muss und schaue erst dort aber wie?
Warum verwenden Sie nicht den integrierten Config-Parser? http://docs.python.org/library/configparser.html –
benutze ich, aber ich vergesse, die Importlinie einzufügen ... – mamcx