मैंने the docs का हिस्सा पढ़ा और देखा कि ConfigParser
किसी अनुभाग के विकल्पों के लिए कुंजी/मान जोड़े की एक सूची देता है। मुझे लगा कि कुंजियों को एक खंड के भीतर अद्वितीय होने की आवश्यकता नहीं थी, अन्यथा पार्सर सिर्फ मैपिंग वापस कर देगा। मैं इस धारणा के आसपास मेरी कॉन्फ़िग फ़ाइल स्कीमा डिज़ाइन किया गया है, तो उदासी महसूस किया कि यह स्थिति नहीं है:पायथन की कॉन्फ़िगर पार्सर प्रति अनुभाग
>>> from ConfigParser import ConfigParser
>>> from StringIO import StringIO
>>> fh = StringIO("""
... [Some Section]
... spam: eggs
... spam: ham
... """)
>>> parser = ConfigParser()
>>> parser.readfp(fh)
>>> print parser.items('Some Section')
[('spam', 'ham')]
तो मैं वापस चला गया और डॉक्स का हिस्सा है कि मैं पढ़ा जाना चाहिए था पाया:
अनुभाग आमतौर पर बिल्टिन शब्दकोश में संग्रहीत किए जाते हैं। एक वैकल्पिक शब्दकोश का प्रकार कॉन्फ़िगरर्स नियंत्रक को पास किया जा सकता है। उदाहरण के लिए, यदि कोई शब्दकोश प्रकार बीत चुका है तो इसकी चाबियाँ टाइप करता है, तो अनुभाग लिखने पर क्रमबद्ध होंगे, जैसा कि प्रत्येक अनुभाग में कुंजी होगी।
मेरी मौजूदा कॉन्फ़िगरेशन फ़ाइल योजना (जिसे मैं वास्तव में अब पसंद करता हूं;) रखने के लिए, ऊपर बताए गए मैपिंग-जैसी ऑब्जेक्ट को पार करने के बारे में सोच रहा हूं जो उन्हें क्लॉबर करने के बजाय मूल्य जमा करता है। क्या कुंजी/मूल्य पतन को रोकने के लिए कोई आसान तरीका है जिसे मैं याद कर रहा हूं? एक पागल एडाप्टर बनाने के बजाय (ConfigParser
के कार्यान्वयन में परिवर्तन तोड़ सकता है) क्या मुझे सिर्फ ConfigParser
का एक प्रकार लिखना चाहिए?
मुझे लगता है कि यह उन 'duh' क्षणों में से एक हो सकता है जहां मैं केवल मुश्किल समाधान देख रहा हूं।
[संपादित करें:] यहाँ कैसे मैं एक ही कुंजी कई बार उपयोग करना चाहते हैं की एक और अधिक सटीक उदाहरण है:
[Ignored Paths]
ignore-extension: .swp
ignore-filename: tags
ignore-directory: bin
मैं अल्प विराम द्वारा सीमांकित सूची वाक्य रचना नापसंद है क्योंकि यह मुश्किल है पर आंखें जब आप इसे कई मूल्यों में स्केल करते हैं; उदाहरण के लिए, पचास एक्सटेंशन की कॉमा सीमांकित सूची विशेष रूप से पठनीय नहीं होगी।
मुझे लगता है कि सूचियों का उपयोग करना 'अनदेखा-विस्तार: ...' –
की 50 लाइनों की तुलना में अधिक पठनीय होगा? मैं असहमत हूं ... प्रत्येक के साथ एक अलग लाइन पर आप केवल सूची को स्कैन कर सकते हैं - मुझे कभी भी तीन-अक्षर एक्सटेंशन की अल्पविराम सीमित सूची नहीं मिली है। मैं उन लोगों को भी उम्मीद करता हूं जो किसी भी दिए गए विकल्प को आसानी से टिप्पणी करना चाहते हैं, जो अलग-अलग लाइनों के लिए अनुकूल है। – cdleary