PythonでTree(木構造)のデータを扱うライブラリ「Node, anytree,RenderTree」

プログラミング Python

Pythonで作成している処理の中でどうしても「Tree(木構造)のデータ」を扱うことが必要になりました。

一から自分で作るのは不具合を生みそうなので何かないかと探したところ「Node, anytree,RenderTree」ライブラリを使うことで解決ができそうです。

今回はこの「Node, RenderTree」ライブラリの使い方を解説します。

スポンサーリンク

Tree(木構造)のデータを扱うライブラリ(Node, anytree, RenderTree)

PythonでTree(木構造)のデータを扱うには「Node, anytree, RenderTree」を使う方法が簡単そうです。

ライブラリNodeとanytreeのインストール

まずは「Node」と「anytree」が必要になるのでインストールします。

インストールはpipを使ってできます。

pip install Node
pip install anytree

Tree(木構造)の生成

次にNodeを使ってTree(木構造)を生成します。

from anytree import Node, RenderTree

udo  = Node( "Udo" , parent=None )
marc = Node( "Marc", parent=udo )
lian = Node( "Lian", parent=marc )
dan  = Node( "Dan",  parent=udo )
jet  = Node( "Jet",  parent=dan )
jan  = Node( "Jan",  parent=dan )
joe  = Node( "Joe",  parent=dan )

基本的には生成するNodeオブジェクトに親のNodeオブジェクトを指定して設定していきます。
(Topだけは「Parent(親)」が存在しないので引数を指定しないか、Noneを与えておきます。)

これで準備完了です。

Tree(木構造)へのアクセス

Tree(木構造)へのアクセスは「RenderTree」を使って行います。

for pre, fill, node in RenderTree(udo):
	print("%s%s" % (pre, node.name))

上記のプログラムを実行すると

Udo
├── Marc
│   └── Lian
└── Dan
    ├── Jet
    ├── Jan
    └── Joe

になります。

Nodeへの独自のプロパティ追加

Nodeオブジェクトには独自のプロパティーを追加することができます。

from anytree import Node, RenderTree

udo  = Node( "Udo" , parent=None, dirtype=1 )
marc = Node( "Marc", parent=udo,  dirtype=2 )
lian = Node( "Lian", parent=marc, dirtype=3 )
dan  = Node( "Dan",  parent=udo,  dirtype=1 )
jet  = Node( "Jet",  parent=dan,  dirtype=1 )
jan  = Node( "Jan",  parent=dan,  dirtype=1 )
joe  = Node( "Joe",  parent=dan,  dirtype=1 )

これでNodeにdirtypeというプロパティが設定されました。

プロパティの参照にはちょっと工夫が必要で

for pre, fill, node in RenderTree(udo):
	print( "name=[{}],depth=[{}],dirtype=[{}]".format( node.name, node.depth, eval("node.dirtype")   ))

のように「eval」を使うと上手く参照できるようになります。

実行結果は

name=[Udo],depth=[0],dirtype=[1]
name=[Marc],depth=[1],dirtype=[2]
name=[Lian],depth=[2],dirtype=[3]
name=[Dan],depth=[1],dirtype=[1]
name=[Jet],depth=[2],dirtype=[1]
name=[Jan],depth=[2],dirtype=[1]
name=[Joe],depth=[2],dirtype=[1]

になります。

まとめ

PythonでTree(木構造)のデータを扱うには「Node, anytree, RenderTree」を使う方法が簡単でおすすめです。

以上、PythonでTree(木構造)のデータを扱うライブラリ「Node, anytree,RenderTree」でした。

タイトルとURLをコピーしました