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 




configparser