Ich habe versucht, das ConfigParser- Modul von Python zum Speichern von Einstellungen zu verwenden. Für meine App ist es wichtig, dass ich die Groß- und Kleinschreibung jedes Namens in meinen Abschnitten behalte. In den Dokumenten wird erwähnt, dass die Übergabe von str () an ConfigParser.optionxform () dies erreichen würde, aber es funktioniert bei mir nicht. Die Namen sind alle in Kleinbuchstaben. Vermisse ich etwas
<~/.myrc contents>
[rules]
Monkey = foo
Ferret = baz
Python-Pseudocode von dem, was ich bekomme:
import ConfigParser,os
def get_config():
config = ConfigParser.ConfigParser()
config.optionxform(str())
try:
config.read(os.path.expanduser('~/.myrc'))
return config
except Exception, e:
log.error(e)
c = get_config()
print c.options('rules')
[('monkey', 'foo'), ('ferret', 'baz')]
Bei mir wurde daran gearbeitet, optionxform sofort nach dem Erstellen des Objekts festzulegen
quelle
ConfigParser.ConfigParser()
Fügen Sie Ihrem Code hinzu:
quelle
config.optionxform=str
bewertete Antwort - siehe Zeile :) Nur anstelle Ihrer Lamdba @Martin v. Löwis verwendet die eingebettetestr
FunktionIch weiß, dass diese Frage beantwortet wird, aber ich dachte, einige Leute finden diese Lösung möglicherweise nützlich. Dies ist eine Klasse, die die vorhandene ConfigParser-Klasse problemlos ersetzen kann.
Bearbeitet, um den Vorschlag von @ OozeMeister aufzunehmen:
Die Verwendung entspricht der von ConfigParser.
Auf diese Weise müssen Sie nicht jedes Mal, wenn Sie eine neue erstellen, optionxform festlegen
ConfigParser
, was etwas mühsam ist.quelle
optionxform
es sich nur um eine Methode für dieRawConfigParser
Erstellung einer eigenen Unterklasse handelt, sollten Sie stattdessen die Methode für die Unterklasse überschreiben, anstatt sie pro Instanziierung neu zu definieren:class CaseConfigParser(ConfigParser): def optionxform(self, optionstr): return optionstr
Vorbehalt:
Wenn Sie mit ConfigParser Standardeinstellungen verwenden, z.
und versuchen Sie dann, den Parser zwischen Groß- und Kleinschreibung zu unterscheiden, indem Sie Folgendes verwenden:
Alle Ihre Optionen aus Konfigurationsdateien behalten ihre Groß- und
FOO_BAZ
Kleinschreibung bei, werden jedoch in Kleinbuchstaben konvertiert.Verwenden Sie Unterklassen wie in der Antwort von @icedtrees, um die Standardeinstellungen beizubehalten:
Jetzt
FOO_BAZ
bleibt es so und Sie haben keinen InterpolationMissingOptionError .quelle