2011-07-08 10 views
22

के साथ फ़ाइलों को टिप्पणियां लिखना अनुभागों के भीतर किसी दिए गए फ़ाइल पर टिप्पणियां कैसे लिख सकता है?ConfigParser

तो मेरे पास है:

import ConfigParser 
with open('./config.ini', 'w') as f: 
    conf = ConfigParser.ConfigParser() 
    conf.set('DEFAULT', 'test', 1) 
    conf.write(f) 

मैं फ़ाइल मिल जाएगा:

[DEFAULT] 
test = 1 

लेकिन यह कैसे मैं की तरह [DEFAULT] खंड के अंदर टिप्पणी के साथ एक फ़ाइल प्राप्त कर सकते हैं,:

[DEFAULT] 
; test comment 
test = 1 

मुझे पता है कि मैं फाइलों को कोड करके कोड लिख सकता हूं:

import ConfigParser 
with open('./config.ini', 'w') as f: 
    conf = ConfigParser.ConfigParser() 
    conf.set('DEFAULT', 'test', 1) 
    conf.write(f) 
    f.write('; test comment') # but this gets printed after the section key-value pairs 

क्या यह ConfigParser के साथ एक संभावना है? और मैं एक और मॉड्यूल का प्रयास नहीं करना चाहता क्योंकि मुझे अपने कार्यक्रम को "स्टॉक" जितना संभव हो सके रखना है।

+0

, मैं पुराने मानक फ़ाइल का उपयोग कर मेरी फाइल लिखने का फैसला किया इंटरफ़ेस 'f = open ('test.ini', 'w'); f.write ('blabla') 'क्योंकि ConfigParser मॉड्यूल एक पूर्वनिर्धारित क्रम में भी नहीं लिखता है (क्योंकि यह शब्दकोश का उपयोग कर रहा है, भले ही उदाहरणों में से एक यह कहता है कि लेखन किसी प्रकार के क्रम में किया गया है: [पायथन डॉक्स] (http://docs.python.org/library/configparser.html#examples)) – razvanc

+0

यदि आप अभी भी आसपास हैं तो मैं सुझाव दूंगा कि आप इसके बारे में एक संक्षिप्त उत्तर लिखें और इसे स्वीकार्य के रूप में चिह्नित करें। मैंने इस टिप्पणी के बाद भी प्रस्तावित उत्तर पढ़ा और उसी निष्कर्ष पर पहुंचा ... लेकिन मुझे थोड़ी देर लग गई और मैंने आपके चुने हुए समाधान को भी वोट दिया है ... – estani

उत्तर

19

आप allow_no_value का उपयोग कर सकते है यदि आपके पास वी है तो विकल्प ersion> = 2.7

यह स्निपेट:

import ConfigParser 

config = ConfigParser.ConfigParser(allow_no_value=True) 
config.add_section('default_settings') 
config.set('default_settings', '; comment here') 
config.set('default_settings', 'test', 1) 
with open('config.ini', 'w') as fp: 
    config.write(fp) 


config = ConfigParser.ConfigParser(allow_no_value=True) 
config.read('config.ini') 
print config.items('default_settings') 

इस तरह एक INI फ़ाइल पैदा करेगा: विन्यास फाइल लिखने के लिए ConfigParser विचार करने के बाद

+0

एक साइड नोट के रूप में, यह तब तक काम करता है जब तक आप 'DEFAULT' अनुभाग में टिप्पणियां लिखने की कोशिश नहीं कर रहे हैं - लिखने के कार्य में एक चेक है "लिखने" से बचने के लिए, लेकिन केवल जब नहीं लिखना 'डिफॉल्ट' खंड से बाहर। –

+0

अच्छा बिंदु। सौभाग्य से, पायथन 3.6 में, 'configparser' मॉड्यूल में यह अजीब व्यवहार नहीं है। इस प्रकार, 'config = configparser।ConfigParser ({"; टिप्पणी": कोई नहीं}, allow_no_value = True) 'किसी भी पिछला' = none' के बिना, डिफ़ॉल्ट खंड में कोई टिप्पणी प्रविष्ट करता है। आउटपुट के सही क्रम की गारंटी के लिए, 'संग्रह। ऑर्डर्ड डिक्ट' की आवश्यकता है (मेरे उदाहरण में' dict 'के बजाय)। – EOL

+0

यह विकल्प केवल तभी काम करेगा जब आप एक नई फाइल बना रहे हों। यदि आप किसी अनुभाग से टिप्पणियों के साथ पिछली फ़ाइल संपादित कर रहे हैं, तो वे सभी मिटा देंगे: / – GEPD

3

आप वेरिएबल बना सकते हैं जो # या इससे शुरू होता है; चरित्र:

conf.set('default_settings', '; comment here', '') 
conf.set('default_settings', 'test', 1) 

बनाया conf फ़ाइल

[default_settings] 
    ; comment here = 
    test = 1 

ConfigParser.read समारोह पहले मान पार्स नहीं होगा

config = ConfigParser.ConfigParser() 
config.read('config.ini') 
print config.items('default_settings') 

देता

[('test','1')] 
+1

पीछे की ओर '= 'के साथ बहुत बदसूरत। – ThiefMaster

+0

शायद यह ConfigParser के साथ सबसे अच्छा और एकमात्र तरीका है। धन्यवाद – razvanc

+0

आप पिछली '=' से छुटकारा पा सकते हैं। जब आप कोई टिप्पणी लिखना चाहते हैं तो आप 'सेट' विधि को कॉल करते समय तीसरे तर्क को छोड़ दें। अन्यथा आप इसे एक खाली स्ट्रिंग असाइन कर रहे हैं जिसके परिणामस्वरूप अवांछित पिछला '= 'होता है। – benregn

संबंधित मुद्दे