Code Monkey home page Code Monkey logo

Comments (3)

ahuard0 avatar ahuard0 commented on June 11, 2024 5

I found a much better solution that works amazingly well. Treelib trees and nodes are fully serializable, which allows the Pickle module to save the tree as a binary file. Doing this is surprisingly fast, even when working with trees that are megabytes in size.

def SaveTree(self, savepath_pickle):
    with open(savepath_pickle, "wb") as file:
        pickle.dump(self.tree, file)

def LoadTree(self, loadpath_pickle):
    with open(loadpath_pickle, 'rb') as file:
        self.tree = pickle.load(file)

from treelib.

lironesamoun avatar lironesamoun commented on June 11, 2024 2

Is there another (simple) way to load a tree from json without saving it ?

from treelib.

ahuard0 avatar ahuard0 commented on June 11, 2024

I had to parse the JSON dictionary/list structure to reconstruct the Tree object:

import json
from pathlib import PurePosixPath, Path
from treelib import Node, Tree

def LoadTreeJSON(self, loadpath_json=None):
    if loadpath_json is None:
        loadpath_json = self.GetFilePathJSON()
    if loadpath_json is None:
        return
    with open(loadpath_json) as file:
        self.tree = Tree()
        data = json.load(file)
        for key1, value1 in data.items():
            node1=PurePosixPath(key1)
            self.tree.create_node(tag=key1, identifier=str(node1), parent=None)
            for list1 in value1['children']:
                for key2, value2 in list1.items():
                    node2=PurePosixPath(key1, key2)
                    self.tree.create_node(tag=key2, identifier=str(node2), parent=str(node1))
                    for list2 in value2['children']:
                        for key3, value3 in list2.items():
                            node3=PurePosixPath(key1, key2, key3)
                            self.tree.create_node(tag=key3, identifier=str(node3), parent=str(node2))
                            for list3 in value3['children']:
                                if isinstance(list3, dict):  # Process Only Filled Directories
                                    for key4, value4 in list3.items():
                                        node4=PurePosixPath(key1, key2, key3, key4)
                                        self.tree.create_node(tag=key4, identifier=str(node4), parent=str(node3))
                                        for list4 in value4['children'][0:]:
                                            node5=PurePosixPath(key1, key2, key3, key4, list4)
                                            self.tree.create_node(tag=list4, identifier=str(node5), parent=str(node4))

from treelib.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.