2010-08-09 12 views
20

पाइथन प्रोग्राम, अंतर्निहित मॉड्यूल (ConfigParser) या स्वतंत्र प्रोजेक्ट (ConfigObj), या YAML डेटा क्रमबद्धता प्रारूप का उपयोग करने के लिए सेटिंग्स फ़ाइल बनाने के लिए कौन सा बेहतर है? मैंने सुना है कि ConfigPbj को ConfigParser से उपयोग करना आसान है, भले ही यह अंतर्निहित लाइब्रेरी न हो। मैंने यह भी पढ़ा है कि पीईवाईएएमएल का उपयोग करना आसान है, हालांकि वाईएएमएल का उपयोग करने में थोड़ा समय लगता है। एक तरफ कार्यान्वयन की आसानी, सेटिंग्स/विन्यास फाइल बनाने के लिए सबसे अच्छा विकल्प कौन सा है?Python सेटिंग्स फ़ाइल के लिए YAML का उपयोग कर ConfigObj/ConfigParser बनाम

उत्तर

8

कॉन्फ़िगरेशन का उपयोग करना कम से कम बहुत सरल और सामान्य में आईएनआई फ़ाइलें वाईएएमएल की तुलना में बहुत सरल (और अधिक व्यापक रूप से उपयोग की जाती हैं) हैं। अधिक जटिल मामलों के लिए, सत्यापन, डिफ़ॉल्ट मान और प्रकार सहित, ConfigObj configspec सत्यापन के माध्यम से ऐसा करने का एक तरीका प्रदान करता है।

सरल कोड ConfigObj के साथ एक INI फ़ाइल को पढ़ने के लिए:

from configobj import ConfigObj 

conf = ConfigObj('filename.ini') 
section = conf['section'] 
value = section['value'] 

यह स्वचालित रूप से आप के लिए सूची मान संभालती है और बहु-मान की अनुमति देता है। यदि आप कॉन्फ़िगरेशन फ़ाइल को संशोधित करते हैं तो आप आदेश और टिप्पणियों को संरक्षित करते समय इसे वापस लिख सकते हैं।

, अधिक जानकारी के लिए इन लेख देखें प्रकार सत्यापन के उदाहरण सहित:

5

कॉन्फ़िगरर्स के पास वास्तव में एक खराब एपीआई है, कॉन्फ़िगरेशन अच्छा होना चाहिए, लेकिन मैंने कभी इसका उपयोग नहीं किया है, आईएनआई फाइलों के लिए मैं आमतौर पर अपना खुद का पार्सर लागू करता हूं।

हालांकि इन-जैसे प्रारूप अलग-अलग प्रकार, अनुक्रम या रिकर्सिव मैपिंग को किसी भी तरह से संभाल नहीं पाते हैं इसलिए मैं यम का उपयोग करूंगा। एक संपादक के साथ पढ़ना और संपादित करना आसान है, उन फ़ाइलों को पार्स करने के लिए एक मानक है और आपके पास इन-जैसा प्रारूपों में से कोई भी उल्लिखित डाउनसाइड्स नहीं है।

+3

ConfigObj प्रकार और अनुक्रम ठीक संभालता है :-) – fuzzyman

6

यह है कि आप अपने config में संग्रहीत करना चाहते हैं पर निर्भर करता है फाइलें और आप उनका उपयोग कैसे करते हैं

  • आप दौर ट्रिपिंग है (YAML → कोड → YAML) और टिप्पणियों संरक्षित आप PyYAML या ConfigParser का उपयोग नहीं कर सकते हैं।

  • आप अपनी चाबी (जैसे जब आप अपने config फाइल में जाँच) के आदेश को संरक्षित करना चाहते हैं, तो PyYAML नहीं करता है कि जब तक आप !!omap निर्दिष्ट

    (जो यह कम आसान एक सामान्य मानचित्रण से अद्यतन करने के लिए बनाता है)
  • यदि आप मैपिंग्स/डिक्शनियर युक्त अज्ञात तत्वों की सूचियों के साथ जटिल संरचनाएं चाहते हैं, तो ConfigParser और ConfigObj आपकी मदद नहीं करेंगे क्योंकि आईएनआई फाइलों की कुंजी-मूल्य जोड़े को अनुभागों में जाना होगा और सूचियां केवल मूल्य हो सकती हैं।

YAML पाठक के ruamel.yaml कार्यान्वयन ऊपर ¹ के सभी का समर्थन करता है। मैंने लंबे समय तक राउंड ट्रिप टिप्पणी संरक्षण के लिए फ़ज़ीमैन के उत्कृष्ट कॉन्फ़िगरेशन का उपयोग किया है, साथ ही साथ अधिक जटिल संरचनाओं के लिए पीईवाईएएमएल का उपयोग किया है और यह दोनों दुनिया के सर्वश्रेष्ठ संयोजन को जोड़ता है।ruamel.yamlyaml उपयोगिता कि YAML

को ConfigObj INI फ़ाइलों में बदल सकते हैं

¹ ruamel.yaml एक YAML पुस्तकालय YAML 1.2 का समर्थन करता है (मुझे लगता है कि का उपयोग करना चाहिये, लेकिन फिर मैं पैकेज के लेखक हूँ) भी शामिल है। PyYAML केवल (अधिकांश) YAML 1.1 का समर्थन करता है।

+0

ruamel.yaml को इंगित करने के लिए धन्यवाद। – jgomo3

+1

मुझे एक अस्वीकरण याद आती है कि इस पोस्ट का लेखक 'ruamel.yaml'' का लेखक भी है। – xmedeko

+0

@xmedeko वह जगह है जहां '(लापरवाही प्लग) 'का अर्थ है, लेकिन मैं मानता हूं कि यह अधिक स्पष्ट होना चाहिए (जैसा कि मैंने बाद के उत्तरों में किया है, जैसे [यहां] (http://stackoverflow.com/a/29415791/ 1307 9 0 9) और [यहां] (http://stackoverflow.com/a/36631057/1307905) यह जवाब ruamel.yaml प्रकाशित करना शुरू करने के ठीक बाद से है। – Anthon

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