2010-06-09 11 views
7

मैं एक कॉन्फ़िगरेशन फ़ाइल प्रारूप का उपयोग करना चाहता हूं जो कुंजी मान जोड़े और घोंसले, दोहराने योग्य संरचनाओं का समर्थन करता है, और जो संभवतः वाक्यविन्यास पर प्रकाश के रूप में प्रकाश है। मैं कुछ के साथ कुछ कल्पना कर रहा हूं:पायथन: डीसेंट कॉन्फ़िगरेशन फ़ाइल प्रारूप

cachedir = /var/cache 
mail_to = [email protected] 

job { 
    name = my-media 
    frequency = 1 day 
    source { 
     from = /home/michael/Images 

    source { } 
    source { }  
} 

job { } 

मैं महत्वपूर्ण-व्हाइटस्पेस का उपयोग करके कुछ भी खुश हूं।

JSON को बहुत से स्पष्ट वाक्यविन्यास नियमों (उद्धरण, अल्पविराम, आदि) की आवश्यकता है। वाईएएमएल वास्तव में बहुत अच्छा है, लेकिन नौकरियों को एक वाईएएमएल सूची के रूप में परिभाषित करने की आवश्यकता होगी, जिसे मुझे उपयोग करने के लिए थोड़ा अजीब लगता है।

उत्तर

13

मुझे लगता है कि YAML इस उद्देश्य के लिए बहुत अच्छा है, वास्तव में:

jobs: 
- name: my-media 
    ... 

- name: something else 
    ... 

अथवा सूची के बजाय एक dict के रूप में:

jobs: 
    my-media: 
    frequency: 1 day 
    ... 
    something-else: 
    frequency: 2 day 
    ... 

एक और बात पर विचार करना है, जो आप नहीं हो सकता है, विन्यास के लिए पायथन स्रोत का उपयोग कर। आप पाइथन डिक्ट्स और सूचियों को एक बहुत ही पठनीय तरीके से घोंसला कर सकते हैं और यह कई अप्रत्याशित लाभ प्रदान करता है। उदाहरण के लिए, Django अपनी सेटिंग्स फ़ाइलों के लिए पायथन स्रोत का उपयोग करता है।

+1

dict विचार के लिए धन्यवाद। मैं एक सूची में उस वाक्यविन्यास को पसंद करूंगा, उस दृष्टिकोण को नहीं माना था। – miracle2k

1

पहिया का पुनः आविष्कार क्यों किया? आप लाल-कबूतर के config प्रणाली का उपयोग कर सकते

http://docs.python.org/library/configparser.html

+3

कॉन्फ़िगरर्स दोहराने योग्य संरचनाओं का समर्थन नहीं करता है (ठीक है, एक आसान तरीके से नहीं) – Rabarberski

2

मैं तुम्हें पुस्तकालय http://www.hyperrealm.com/libconfig/ libconfig की जाँच करनी चाहिए लगता है। इसके लिए कहीं पाइथन बाइंडिंग होना चाहिए।

एक अन्य समाधान जेसन प्रारूप का उपयोग करना है जो पहले से ही पाइथन द्वारा प्रदान किया गया है। JSON मॉड्यूल के लिए दस्तावेज़ खोजें।

8

चूंकि पाइथन का अंतर्निहित configparser मॉड्यूल नेस्टेड अनुभागों का समर्थन नहीं करता है, तो मैं पहले ConfigObj आज़माउंगा। (एक प्रारंभिक ट्यूटोरियल here देखें)।अपने मुखपृष्ठ के अनुसार, इस उल्लेख के लायक सुविधाओं का सेट है:

  • नेस्टेड वर्गों (उपखंड), किसी भी स्तर तक
  • सूची को महत्व देता
  • एकाधिक लाइन को महत्व देता
  • स्ट्रिंग प्रक्षेप (प्रतिस्थापन)
  • एक शक्तिशाली सत्यापन प्रणाली
    • स्वचालित प्रकार की जांच/रूपांतरण
    • समेत एकीकृत
    • दोहराया वर्गों
    • और मूलभूत मूल्यों की इजाजत दी
  • जब config फ़ाइलों को लेखन, ConfigObj
  • कई उपयोगी तरीके और विकल्प विन्यास फाइल के साथ काम करने के लिए सभी टिप्पणियों और सदस्यों के आदेश और वर्गों की तरह (बरकरार रखता है 'Reload' विधि)
  • पूर्ण यूनिकोड समर्थन

ConfigObj बाजार, Trac, IPython, matplotlib और कई अन्य बड़े अजगर जनसंपर्क द्वारा किया जाता है ojects, तो यह मेरे लिए बहुत परिपक्व और स्थिर लगता है (हालांकि मैंने इसे कभी नहीं इस्तेमाल किया)।

0

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

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