python - ConfigParser में मामला संरक्षित करें?
configuration-files python-2.x (4)
अपने कोड में जोड़ें:
config.optionxform = lambda option: option # preserve case for letters
मैंने सेटिंग्स को बचाने के लिए पायथन के ConfigParser मॉड्यूल का उपयोग करने की कोशिश की है। मेरे एप्लिकेशन के लिए यह महत्वपूर्ण है कि मैं अपने अनुभागों में प्रत्येक नाम के मामले को संरक्षित करूं। डॉक्स उल्लेख करते हैं कि पासिंग ConfigParser.optionxform() () से ConfigParser.optionxform() () तक ConfigParser.optionxform() होगी, लेकिन यह मेरे लिए काम नहीं करेगा। नाम सभी लोअरकेस हैं। क्या मैं कुछ भूल रहा हूँ?
<~/.myrc contents>
[rules]
Monkey = foo
Ferret = baz
पाइथन छद्मकोड की मुझे क्या मिला:
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')]
चेतावनी:
यदि आप विन्यासकर्ता के साथ डिफॉल्ट का उपयोग करते हैं, अर्थात:
config = ConfigParser.SafeConfigParser({'FOO_BAZ': 'bar'})
और फिर इस का उपयोग करके पार्सर मामले को संवेदनशील बनाने की कोशिश करें:
config.optionxform = str
config फ़ाइल (ओं) से आपके सभी विकल्प अपना मामला रखेंगे, लेकिन FOO_BAZ
को लोअरकेस में बदल दिया जाएगा।
चूक के लिए भी उनके मामले को रखने के लिए, @icedtrees जवाब में उपवर्ग का उपयोग करें:
class CaseConfigParser(ConfigParser.SafeConfigParser):
def optionxform(self, optionstr):
return optionstr
config = CaseConfigParser({'FOO_BAZ': 'bar'})
अब FOO_BAZ
इसे जारी रखेगा और आपके पास InterpolationMissingOptionError नहीं होगा।
मुझे पता है कि इस प्रश्न का उत्तर दिया गया है, लेकिन मुझे लगा कि कुछ लोगों को यह समाधान उपयोगी लग सकता है। यह एक ऐसा वर्ग है जो आसानी से मौजूदा विन्यासकर्ता वर्ग को बदल सकता है।
@ OozeMeister के सुझाव को शामिल करने के लिए संपादित:
class CaseConfigParser(ConfigParser):
def optionxform(self, optionstr):
return optionstr
उपयोग सामान्य configParser के समान है।
parser = CaseConfigParser()
parser.read(something)
ऐसा तब होता है जब आप हर बार नया ConfigParser
बनाने वाले ConfigParser
, जो थकाऊ होता है।
मेरे लिए ऑब्जेक्ट बनाने के तुरंत बाद optionxform सेट करने के लिए काम किया
config = ConfigParser.RawConfigParser()
config.optionxform = str