2009-12-18 7 views
9

कहें कि मेरे पास कुछ नेस्टेड सूचियों का प्रतिनिधित्व करने वाली स्ट्रिंग है और मैं इसे वास्तविक चीज़ में परिवर्तित करना चाहता हूं। मैं ऐसा कर सकता है, मुझे लगता है:मैं एक मूल सूची में नेस्टेड सूची का प्रतिनिधित्व करने वाली स्ट्रिंग का विश्लेषण कैसे करूं?

exec "myList = ['foo', ['cat', ['ant', 'bee'], 'dog'], 'bar', 'baz']" 

लेकिन, ऐसा माहौल उपयोगकर्ताओं स्ट्रिंग इस पर अमल करने/एक बुरा विचार किया जाएगा सकता है की आपूर्ति की जा सकती है में। क्या किसी के पास एक साफ पार्सर के लिए कोई विचार है जो एक ही चीज़ को पूरा करेगा?

+0

+1 इस तरह की चीज़ को जानने के लिए जोखिम है और इसके बारे में पूछना है। –

उत्तर

21
>>> import ast 
>>> mylist = ast.literal_eval("['foo', ['cat', ['ant', 'bee'], 'dog'], 'bar', 'baz']") 
>>> mylist 
['foo', ['cat', ['ant', 'bee'], 'dog'], 'bar', 'baz'] 

ast.literal_eval:

सुरक्षित रूप से एक अभिव्यक्ति नोड या एक स्ट्रिंग एक अजगर अभिव्यक्ति युक्त मूल्यांकन करते हैं। स्ट्रिंग या नोड प्रदान किए गए पाइथन शाब्दिक संरचनाओं के बाद केवल हो सकता है: स्ट्रिंग्स, संख्याएं, टुपल्स, सूचियां, डिक्ट्स, बूलियन और कोई नहीं।

यह सुरक्षित रूप से युक्त अजगर अविश्वस्त स्रोतों से भाव मान अपने आप को पार्स करने के लिए आवश्यकता के बिना तार के मूल्यांकन के लिए इस्तेमाल किया जा सकता।

+0

+1 आयात अस्थिर गोल, अच्छी चीजें बनाने! – jathanism

+0

कूल। पिछले हफ्ते मैंने पहली बार eval() का उपयोग किया था, लेकिन ast.literal_eval वह है जो मैं वास्तव में चाहता था। नोट, मैंने एक कॉन्फ़िगरेशन फ़ाइल मान को पार्स करने के लिए eval का उपयोग किया, इसलिए यह विश्वसनीय डेटा है, लेकिन फिर भी ... – ddaa

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

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