2013-03-04 12 views
5

में ले कर रीयर्सन के माध्यम से अजगर में एक पेड़ बनाएं, मैं पाइथन के लिए नया हूं और मुझे टेक्स्ट फ़ाइल
से इनपुट में लेने के बाद अजगर में एक पेड़ बनाना है, मेरे पास टेक्स्ट फ़ाइल में निम्न डेटा है। मैं Jsonजेसन ऑब्जेक्ट

का उपयोग कर नीचे डेटा
  { 
       "component": "A", 
       "status": 0, 
       "children": [ 
        { 
         "component": "AA", 
         "status": 0, 
         "children": [ 
          { 
           "component": "AAA", 
           "status": 0, 
           "children": [] 
          }, 
          { 
           "component": "AAB", 
           "status": 0, 
           "children": [] 
          } 
         ] 
        }, 
        { 
         "component": "AB", 
         "status": 0, 
         "children": [ 
          { 
           "component": "ABA", 
           "status": 0, 
           "children": [] 
          }, 
          { 
           "component": "ABB", 
           "status": 0, 
           "children": [] 
          } 
         ] 
        } 
      } 

मैं नीचे दिए गए कोड लिखा के साथ अजगर में एक पेड़ का निर्माण करने के लिए है, लेकिन यह वाक्यविन्यास त्रुटियों अगर किसी भी एक मिल सकता है जो इम असमर्थ सही करने के लिए है उन्हें

  class node: 
       #Construction of Node with component,status and children 
       def _init_(self,component=None,status=None,children=None): 
        self.component = component 
        self.status = status 
        if children is None: 
         self.children = [] 
        else: 
         self.children = children 

      #Building Json object from text file    
      class start: 
       import json 

       f=open("json_file.txt") 
       data=json.load(f) 
       buildnode(data) 


      #Construction of tree through recursion    
      class implementation: 
       def buildnode(self,ob): 
        node1= node() 
        node1.component=ob.component 
        node1.status=ob.status 
        node1.children=[] 
        print 'component',component,'','status',status 
        for children in ob: 
         node1.children.add(buildnode(children[i])) 

        return node1 
+0

त्रुटि मैं दिखाई दे रही है एक डिकोडिंग JSON से संबंधित त्रुटि है (ऐसा लगता है कि आप अंतिम पंक्ति के बाद दूसरे स्थान पर एक बंद करने वर्ग कोष्ठक याद कर रहे हैं) –

+1

और इसकी बिल्डनोड विधि –

उत्तर

1

ठीक है मैं अपने कोड में कीड़े को ठीक करने में सक्षम था और अब यह इस तरह दिखता है:

class node: 
    #Construction of Node with component,status and children 
    def _init_(self,component=None,status=None,children=None): 
     self.component = component 
     self.status = status 
     if children is None: 
      self.children = [] 
     else: 
      self.children = children 

#Construction of tree through recursion    
class implementation: 
    def buildnode(self,ob): 
     node1= node() 
     node1.component=ob['component'] 
     node1.status=ob['status'] 
     node1.children=[] 
     print 'component',node1.component,'','status',node1.status 
     for children in ob['children']: 
      node1.children.append(self.buildnode(children)) 

     return node1 

#Building Json object from text file    
class start: 
    import json 

    f=open("json_file.txt") 
    data=json.load(f) 
    builder = implementation() 
    builder.buildnode(data) 

यह निम्न उत्पादन का उत्पादन:

component A status 0 
component AA status 0 
component AAA status 0 
component AAB status 0 
component AB status 0 
component ABA status 0 
component ABB status 0 

यहाँ क्या जरूरत थी के लिए कुछ स्पष्टीकरण है:)

अपने buildnode सबसे पहले आप बुला रहे हैं (इससे पहले कि आप इसे परिभाषित है, और इसलिए आप वर्ग का एक उदाहरण की जरूरत है इससे पहले कि आप इसे कहते है कि यह एक वर्ग कार्य है। अगला जब आप किसी शब्दकोश के अंदर मूल्यों के लिए कॉल कर रहे हैं तो आपको dictionary['key'] तक उन्हें एक्सेस करने की आवश्यकता है। एकमात्र अन्य बड़ी चीज एक सरणी में शामिल करने का तरीका था .append() पर कॉल करना और .add() नहीं।

+0

कॉल करने के लिए इसका एक उदाहरण आमंत्रित किए बिना कक्षा का उपयोग क्यों डाउनवोट? –

+0

बहुत धन्यवाद जेसन। विश्वास नहीं कर सकता कि यह वास्तव में काम करता है, आपने उन सभी मुद्दों को हल किया जो मेरे सलाहकार भी नहीं पकड़ सके ... धन्यवाद: डी – Praneeth

+0

क्या आपका सलाहकार इस उत्तर पर मतदान कर रहा था: पी ग्लेड मैं मदद कर सकता था :) मैं पाइथन सीखने का आनंद ले रहा हूं अच्छी तरह से –

4
import json 

class Node(object): 
    def __init__(self, component=None, status=None, level=0): 
     self.component = component 
     self.status = status 
     self.level  = level 
     self.children = [] 

    def __repr__(self):   
     return '\n{indent}Node({component},{status},{children})'.format(
             indent = self.level*'\t', 
             component = self.component, 
             status = self.status, 
             children = repr(self.children)) 
    def add_child(self, child): 
     self.children.append(child)  

def tree_builder(obj, level=0): 
    node = Node(component=obj['component'], status=obj['status'], level=level) 
    for child in obj.get('children',[]): 
     node.add_child(tree_builder(child, level=level+1)) 
    return node 

def load_json(filename): 
    with open(filename) as f: 
     return json.load(f) 

obj = load_json('test.json') 
tree = tree_builder(obj) 
print tree 

आउटपुट:

Node(A,0,[ 
    Node(AA,0,[ 
     Node(AAA,0,[]), 
     Node(AAB,0,[])]), 
    Node(AB,0,[ 
     Node(ABA,0,[]), 
     Node(ABB,0,[])])]) 
+0

+1 वहां गहराई कोड प्राप्त करने के लिए और क्लीनर क्लास डिज़ाइन के लिए –

+0

मेरा सलाहकार यह देखकर वाकई खुश है .... मैंने उससे कहा कि मैंने इसे स्वयं लिखा है: पी धन्यवाद – Praneeth

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