मैं ConfigParser उपयोग कर रहा हूँ एक विन्यास फ़ाइल से डेटा में लोड करने के लिए इस प्रकार है:Python ConfigParser .items() से DEFAULT को बहिष्कृत कैसे करें?
test.conf:
[myfiles]
fileone: %(datadir)s/somefile.foo
filetwo: %(datadir)s/nudderfile.foo
load.py:
import ConfigParser
config = ConfigParser.ConfigParser({'datadir': '/tmp'})
config.read('test.conf')
print config.items('myfiles')
print config.get('myfiles', 'datadir')
आउटपुट :
$ python load.py
[('datadir', '/tmp'), ('filetwo', '/tmp/nudderfile.foo'), ('fileone', '/tmp/somefile.foo')]
/tmp
मुझे आश्चर्य है कि परिवर्तनीय प्रतिस्थापन ('datadir', '/tmp')
के लिए डिफ़ॉल्ट रूप से दिखाए जा रहे हैं। items()
और .get()
रिटर्न, जैसे कि वे कॉन्फ़िगरेशन फ़ाइल में मान थे। क्या यह व्यवहार अपेक्षित है? कोई काम आसपास है, ताकि मैं बस .items()
को फिर से डिफ़ॉल्ट शब्दकोश मान प्राप्त किए बिना फिर से सक्रिय कर सकूं, लेकिन अभी भी जादू इंटरपोलेशन का उपयोग कर रहा हूं?
संदर्भ: http://docs.python.org/library/configparser.html
धन्यवाद!
अद्यतन: यह इंगित किया गया है कि यह अपेक्षित व्यवहार है: डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइल में किसी भी अन्य नाम/मूल्य जोड़ी की तरह हैं। इसी तरह, विन्यास फाइल में नाम/मान युग्म इसलिए यदि मैं परिभाषित भी "जादू प्रक्षेप" के लिए उपलब्ध हैं,:
foo: bar
zap: %(foo)snowl
मैं [... ('zap': 'barnowl')]
मिलेगा यह सुंदर साफ है, लेकिन मैं अभी भी कर रहा हूँ यह सोचकर कि मैं जो हासिल करना चाहता हूं उसे पूरा कर सकता हूं: डिफ़ॉल्ट रूप से बिना चर के इंटरपोलेशन के साथ, मेरी कॉन्फ़िगरेशन फ़ाइलों में नाम/मूल्य जोड़े पर पुन: प्रयास करें।
मेरा विशिष्ट परिदृश्य यह है: मैं कॉन्फ़िगरेशन ऑब्जेक्ट को {basedir: '/foo/bar'}
जैसे कुछ प्रारंभ करना चाहता था, क्योंकि कुछ फ़ाइलों के पूर्ण पथ स्थापना द्वारा भिन्न होते हैं। फिर मुझे उस कॉन्फ़िगरेशन ऑब्जेक्ट को पास करने की आवश्यकता है और फ़ाइलों के माध्यम से कई अन्य वर्गों को फिर से चालू करना होगा। मैं नहीं चाहता कि प्रत्येक वर्ग जो विन्यास को पढ़ता है उसे यह जानना होगा कि इसे कुछ डिफ़ॉल्ट के साथ शुरू किया गया था और इसे अनदेखा करना चाहिए, क्योंकि वे वास्तविक फाइल नहीं हैं। क्या यह संभव है? .item() और .get() से डिफ़ॉल्ट छिपाने का कोई तरीका है लेकिन अभी भी इंटरपोलेशन है? धन्यवाद!
config = ConfigParser.ConfigParser({'blahblahblah': 'blah'})
config.read('test.conf')
blahblahblah
कुंजी भी items
में दिखाई देगा, क्योंकि यह .ini फ़ाइल में एक टेम्पलेट है, लेकिन आप एक डिफ़ॉल्ट के रूप में निर्दिष्ट है क्योंकि:
मैं नहीं जान सकता क्यों इस डिफ़ॉल्ट व्यवहार है, अकेले क्यों कोई रास्ता नहीं इसे बंद करने के लिए है। स्पष्टीकरण के लिए –