2013-07-27 10 views
11

मेरे पास एक गैर तकनीकी क्लाइंट है जिसमें कुछ पदानुक्रमित उत्पाद डेटा है जो मैं पाइथन के साथ एक पेड़ संरचना में लोड हो रहा हूं। पेड़ में स्तरों की एक चर संख्या है, और प्रत्येक स्तर पर एक परिवर्तनीय संख्या नोड्स और पत्ता नोड्स हैं।पाइथन सीएसवी रीडर द्वारा आसानी से पार्स किए जाने के लिए एक्सेल स्प्रेडशीट का उपयोग करके एक वृक्ष पदानुक्रम का प्रतिनिधित्व करें?

ग्राहक पहले से ही उत्पादों के पदानुक्रम जानता है और मुझे पार्स करने के लिए के लिए एक एक्सेल स्प्रेडशीट में सब कुछ डाल करना चाहते हैं।

क्या प्रारूप हम चाहते हैं कि ग्राहक के लिए आसानी से इनपुट और बनाए रखने के डेटा की अनुमति देता है, और मैं आसानी से अजगर का CSV के साथ एक पेड़ से पार्स कर सकते हैं कि उपयोग कर सकते हैं? प्रत्येक स्तर के लिए कॉलम के साथ जाना इसके हिचकिचाहट के बिना नहीं है (विशेष रूप से यदि हम एकाधिक नोड प्रकारों को पेश करते हैं)

+0

यकीन नहीं है कि मुझे समझ में आया है "प्रत्येक स्तर के लिए कॉलम के साथ जाना इसके हिचकी के बिना नहीं है"। किसी भी मामले में पदानुक्रमिक जानकारी की आवश्यकता होगी। –

उत्तर

13

भविष्य पाठकों के लिए, मैं एक स्तंभ आधारित पदानुक्रम जहां प्रत्येक पंक्ति एक पत्ते को पूरा ट्रेवर्सल है का उपयोग कर समाप्त हो गया। तो आप पत्ते के रूप में कई पंक्तियों के साथ खत्म हो जाते हैं।

Electronics | Computers | Laptops 
Electronics | Computers | Desktop 
Electronics | Game Systems | Xbox 
Electronics | Game Systems | PS3 
Electronics | Game Systems | Wii 
Electronics | MP3 Players | iPod Shuffle 
Clothing | Menswear  | Pants   | Shorts 
Clothing | Menswear  | Pants   | Pajamas 

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

+0

मैं इस समाधान की भी सिफारिश करता हूं। आईएमओ, एक खाली पंक्ति इंडेंट का उपयोग करना अच्छा नहीं है, खासकर एक्सेल में डेटा फ़िल्टर का उपयोग करने के लिए, सभी कोशिकाओं का मूल्य होना चाहिए। तो एरिच समाधान एक्सेल और पायथन दोनों तरफ साफ है। –

+0

फिर, अजगर की ओर, आप केवल डिफॉल्टडिक्ट (dict) की घोंसला वाली संरचना का उपयोग कर सकते हैं –

0

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

मुझे लगता है, पदानुक्रम स्तर सीमित है (जैसे कि, अधिकतम 8 स्तर), अन्यथा एक्सेल अच्छा विचार बिल्कुल भी नहीं है।

इसके अलावा, वहाँ एक पुस्तकालय openpyxl कहा जाता है, सीधे Excel फ़ाइलों को पढ़ने में मदद कर सकते हैं जो उपयोगकर्ता उन्हें CSV में बदलने की जरूरत के बिना, है (यह समग्र दृष्टिकोण के लिए प्रयोज्य कहते हैं)।

एक और तरीका पहले सेल में एक स्तर संख्या डालना है। संख्या 2 या उससे अधिक तक बढ़ाई नहीं जानी चाहिए।

फिर भी एक और दृष्टिकोण प्रत्येक नोड और प्रत्येक नोड पत्ती के लिए कुछ आईडी का उपयोग करने के लिए माता-पिता की आईडी का उल्लेख करने की आवश्यकता होगी है। लेकिन यह बहुत उपयोगकर्ता के अनुकूल नहीं है।

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

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