वाईएएमएल स्पेक स्पष्ट रूप से कहता है कि मैपिंग के भीतर मुख्य आदेश एक "प्रतिनिधित्व विवरण" है जिस पर भरोसा नहीं किया जा सकता है। इसलिए मैपिंग पर निर्भर होने पर आपकी सेटिंग्स फ़ाइल पहले से ही अमान्य है, और यदि संभव हो तो आप वैध वाईएएमएल का उपयोग करके बहुत बेहतर हो जाएंगे।
बेशक वाईएएमएल एक्स्टेंसिबल है, और आपको "ऑर्डर मैपिंग" प्रकार को अपनी सेटिंग्स फ़ाइलों में जोड़ने से रोक नहीं रहा है। उदाहरण के लिए:
!omap setting1:
name: [item,item]
name1: text
!omap anothersetting2:
name: [item,item]
!omap sub_setting:
name :[item,item]
आप जो yaml
मॉड्यूल का उपयोग कर रहे उल्लेख नहीं था। मानक पुस्तकालय में ऐसा कोई मॉड्यूल नहीं है, और केवल पीपीपीआई पर कम से कम दो पैकेज हैं जो उस नाम के साथ मॉड्यूल प्रदान करते हैं। हालांकि, मैं अनुमान लगा रहा हूं कि यह PyYAML है, क्योंकि जहां तक मुझे पता है कि यह सबसे लोकप्रिय है।
ऊपर वर्णित विस्तार PyYAML के साथ पार्स करना आसान है। बजाय
def omap_constructor(loader, node):
return loader.construct_pairs(node)
yaml.add_constructor(u'!omap', omap_constructor)
अब,: http://pyyaml.org/ticket/29 देखें
{'anothersetting2': {'name': ['item', 'item'],
'sub_setting': 'name :[item,item]'},
'setting1': {'name': ['item', 'item'], 'name1': 'text'}}
आप इस मिल जाएगा:
(('anothersetting2', (('name', ['item', 'item']),
('sub_setting', ('name, [item,item]'),))),
('setting1', (('name', ['item', 'item']), ('name1', 'text'))))
बेशक यह आप की-वैल्यू tuple
रों की एक tuple
देता है, लेकिन आप आसानी से build_ordereddict लिख सकते हैं और इसके बजाय OrderedDict
प्राप्त कर सकते हैं। यदि आप आउटपुट के साथ-साथ इनपुट की आवश्यकता है, तो आप OrdereredDict
ऑब्जेक्ट्स !omap
एस के रूप में एक प्रतिनिधि भी लिख सकते हैं।
तुम सच में यह डिफ़ॉल्ट मैपिंग के लिए एक dict
के बजाय एक OrderedDict
का उपयोग करने के लिए PyYAML हुक चाहते हैं, यह अगर आप पहले से पार्सर वस्तुओं पर सीधे काम कर रहे हैं करने के लिए बहुत आसान है, लेकिन और अधिक कठिन है कि अगर आप के साथ रहना चाहता हूँ उच्च स्तरीय सुविधा विधियों। सौभाग्य से, उपर्युक्त लिंक में एक कार्यान्वयन है जिसका आप उपयोग कर सकते हैं।बस याद रखें कि आप वास्तविक वाईएएमएल का उपयोग नहीं कर रहे हैं, लेकिन एक संस्करण, इसलिए आपकी फाइलों से संबंधित कोई भी अन्य सॉफ़्टवेयर, और संभवतः टूट जाएगा।
पहला, है यह 'पाययाम', या कुछ और? कोई अंतर्निर्मित 'yaml' मॉड्यूल नहीं है, और कम से कम दो पीईपीआई पैकेज जो आपको' yaml' मॉड्यूल देते हैं। आम तौर पर, जब भी आप किसी तृतीय-पक्ष मॉड्यूल का उपयोग कर रहे हों, तो आपको यह कहना चाहिए कि आपको यह कहां से मिला है। – abarnert
आप जिस भी मॉड्यूल का उपयोग कर रहे हैं, आपको मैपिंग नोड्स को पायथन में परिवर्तित करने के तरीके को हुक करने की आवश्यकता है, इसलिए यह 'dict' के बजाय 'संग्रह.ऑर्डर्ड डिक्ट' का उपयोग करता है। PyYAML के अलावा अन्य मॉड्यूल के साथ, मुझे कोई जानकारी नहीं है। 'PyYAML' के साथ, यह निश्चित रूप से संभव है, लेकिन जटिल है यदि आप उच्च स्तरीय सुविधा विधियों पर चिपके हुए हैं। कहीं और, किसी ने उल्लेख किया है कि इच्छित हुक का उपयोग करने के बजाय इसे बंद करना आसान था। – abarnert
मैं इस सवाल के शीर्षक के रूप में PyYAML का उपयोग कर सुझाव दूंगा ... -> PyYAML: yaml.load() द्वारा बुलाए गए आइटमों को नियंत्रित करने का नियंत्रण। आपके सुझाव के लिए धन्यवाद!! – zzart