折腾:
【未解决】Python中如何实现Tree树结构且带辅助数据以便于后续计算
期间,
然后再去打印出 tree树状结构图 文字版
用代码:
fakeRootNodeId = "fakeroot0000" fakeRootNode = Node(fakeRootNodeId) for eachFinalRootNode in rootNodeList: if eachFinalRootNode.parent: print("eachFinalRootNode=%s" % eachFinalRootNode) else: eachFinalRootNode.parent = fakeRootNode # for debug for pre, fill, node in RenderTree(fakeRootNode): # print("pre=%s,fill=%s,node=%s" % (pre, fill, node)) print("%s%s" % (pre, node.name))
终于打印出了 文字版的树结构:
akeroot0000 ├── aaaaaaaa5522 │ ├── wyj121212121 │ ├── wyf333222111 │ ├── tzf123451234 │ ├── jch123123123 │ └── ha1234512345 ├── aaaaaaaaaaay │ └── ancdefg12345 │ └── abcd12345555 ├── aaabbbb52152 │ └── zzzzxxx55555 ├── aaawwww12345 │ └── fbbd55432112 ├── abcabc123123 │ └── cj1234512345 ├── abcccc123321 │ └── abcccc123333 ├── abcd21213135 │ └── shuai2123451 ├── abcdef111111 │ └── aaa222222222 ├── abcdefgh1234 │ └── dongyuhai111 ├── abfsd1231234 │ └── adfsf1111222 │ └── abfsd2223333 ├── adc234adc234 │ └── jbp123123123 ├── adminccc1111 │ ├── sunxijun1111 │ │ ├── sxj111222444 │ │ └── sxj111222333 │ └── zhouccc33333 ├── az1234512345 │ └── aa1234512345 │ ├── abcdefg12341 │ ├── yycczrp13141 │ ├── fxj555555555 │ ├── aa1234512333 │ │ └── aa1234512334 │ ├── ac1234512345 │ ├── chen11111111 │ ├── cys111333555 │ ├── taishanshi22 │ └── ch1111155555 ├── azccc1112223 │ └── cccamtf55555 │ ├── huanglijing1 │ ├── zw1111111111 │ └── mjr12345abcc ├── cccandadc555 │ └── wabjtam12345 │ └── wabjtam12341 ├── cccc11113333 │ └── zhangzichen1 │ └── sinweiss5132 ├── chen11223344 │ └── chen44332211 ├── chengjj11234 │ └── chengjj11223 ├── ckj111222333 │ ├── bah123123321 │ ├── zcl123412345 │ │ └── zcl111222333 │ ├── cccqqqbbb111 │ ├── chr122222555 │ ├── cxw123123123 │ └── libaizhuan12 ├── cxl111222333 │ └── zzhh11122233 ├── ddd113113113 │ └── cccccc555555 ├── ericzhangshi │ └── markzhangshi ├── gao111222333 │ └── ajiaxyz12345 ├── gdzhaqowen33 │ └── owenowenowen ├── gg2222222222 │ └── liuzhiming11 ├── gg3333333333 │ └── mo1234512345 │ ├── mo1212121212 │ ├── aaaa13141314 │ │ ├── dddd13141314 │ │ │ ├── lgn131413141 │ │ │ ├── lyc123123123 │ │ │ ├── dyd131413145 │ │ │ └── lixiao123451 │ │ └── ccc113141314 │ ├── wozhanglixia │ └── chenyuming11 ├── gsw123451234 │ └── gsw123451231 ├── guo111222333 │ └── guo333222111 ├── haifengl2233 │ └── shujin131422 ├── hh1234512345 │ └── hhh123123123 ├── hmsm11111111 │ └── hmfs12341234 ├── hongzhib1234 │ └── honfzhib2345 ├── hqj123zwy123 │ └── zwy123hqj123 ├── huanglijing1 │ └── zqlzqlzql222 ├── king55555555 │ └── kimg44444444 ├── ld1234512345 │ └── zx1234512345 ├── lgw123451234 │ └── lgw123451111 ├── lishan131313 │ └── liudx1231235 ├── liyujie11221 │ └── cccwjhz12345 ├── lu1234512345 │ └── nan123451234 ├── lxj111115552 │ └── lxj111115553 ├── lyc123123123 │ ├── ghi123123123 │ │ └── mnb123123123 │ ├── asd123123123 │ │ └── asm123123123 │ ├── aqw123123123 │ ├── wuxianghua13 │ └── hh5432154321 │ └── yy1234554321 ├── majibin12345 │ └── majibin22345 ├── mjr12345abcc │ └── mjr212345ccc │ ├── shj11314cccc │ ├── yaozhenmin12 │ ├── aa3333333333 │ │ └── xtsxtsxts123 │ ├── lishuwei1234 │ ├── gbllfsggnfd1 │ ├── cai123123123 │ ├── qwerthyuiopa │ ├── ntcaima12345 │ ├── zixiong55555 │ ├── liuguangtao1 │ ├── gyy111222333 │ ├── a12345123453 │ │ ├── jgxhxhyq5555 │ │ ├── z13133351311 │ │ ├── xiepeiwen123 │ │ ├── lwy123451235 │ │ │ └── k12345123455 │ │ ├── zyqdsld12345 │ │ ├── xinhongbo123 │ │ ├── c11223344551 │ │ ├── h12345543211 │ │ └── z11122233355 │ ├── mm125125aaaa │ ├── yang55555555 │ ├── zxcvbnm12345 │ ├── huzhengping2 │ ├── azazazz12345 │ ├── adc155315533 │ ├── aabbcc222333 │ ├── abclike12345 │ │ └── abcgaoxin123 │ ├── gh1235432122 │ ├── abcabcabcabc │ ├── wwwwyyyyllll │ ├── kkk123123123 │ ├── kangxiaoguan │ ├── aaa111ccc123 │ │ └── aaa333bbb111 │ ├── runmao112345 │ ├── abcabc112345 │ │ ├── fanfan131415 │ │ ├── xiaofang1234 │ │ ├── junzilan1235 │ │ ├── jingcheng123 │ │ ├── xiaomage1314 │ │ └── mawen1234555 │ ├── abcdefj12341 │ ├── qwerty123451 │ ├── yangyun12345 │ └── sygs12345ljd ├── qwerthyuiopa │ ├── zengjunping1 │ │ └── yanming41314 │ ├── qwertyuiop35 │ ├── qwertyuiop44 │ ├── qwertyuiop55 │ ├── qwertyuiop22 │ ├── qazwsxedc324 │ ├── qwertyuiop25 │ ├── qwertyuiop15 │ └── qwertyuiop13 ├── r12223334444 │ └── r21112223333 ├── rongxifushi1 │ └── jialongsheng ├── runmao112345 │ ├── caicai112233 │ │ ├── zmgzmg123451 │ │ ├── huawei123451 │ │ ├── qwertyuiop12 │ │ ├── shi111222333 │ │ ├── lili12312312 │ │ ├── zhichao12122 │ │ ├── zhouzhou1234 │ │ ├── jackey111111 │ │ │ ├── eason1122345 │ │ │ ├── paul12341234 │ │ │ └── boxcai111111 │ │ ├── aaaaabbb1111 │ │ └── aaaaaab12345 │ ├── whylxqw12345 │ ├── asd332211123 │ ├── mmmmmmm12345 │ ├── xuwenquan123 │ │ └── jinfeng12345 │ ├── huanghc12345 │ ├── ahaoahaoahao │ ├── haiyong12345 │ ├── az1515151515 │ ├── a12345543212 │ ├── az1351351351 │ └── cgxxxxx12345 ├── savagemao222 │ └── savagemao333 ├── shj11314cccc │ ├── yy12345ccccc │ ├── liu12345cccc │ │ ├── jrn12345cccc │ │ │ ├── dhh12345cccc │ │ │ │ ├── yzy12345cccv │ │ │ │ ├── abcdefg12222 │ │ │ │ └── mff12345cccv │ │ │ ├── lzc12345cccc │ │ │ ├── wzywzy123123 │ │ │ ├── jrn12345accc │ │ │ └── duan12341234 │ │ ├── li12345ccccc │ │ │ ├── yang12345ccc │ │ │ ├── cheng12345cc │ │ │ ├── jr12345ccccc │ │ │ ├── ai12345ccccc │ │ │ └── qu12345ccccc │ │ ├── wzy12345cccc │ │ ├── plj12345pljc │ │ ├── zz12345ccccc │ │ ├── wang123huicc │ │ ├── wl1231231233 │ │ ├── gyq111222333 │ │ │ └── gyl111222333 │ │ │ └── xhd111222333 │ │ ├── wyj111111112 │ │ ├── www123123www │ │ ├── azw12345cccc │ │ ├── wyz123123ccc │ │ ├── zhangweiqi55 │ │ ├── wanw12345ccc │ │ ├── zyq12345cccc │ │ ├── xyx12345cccc │ │ ├── zhou12345ccc │ │ ├── wang12345ccc │ │ ├── liujun343434 │ │ │ ├── szj123455ccc │ │ │ ├── cccccsy12345 │ │ │ └── srlcccccc123 │ │ ├── gong12345ccc │ │ └── song1144cccc │ ├── sy12345ccccc │ │ ├── cy12345ccccc │ │ ├── fj12312ccccc │ │ ├── ah1234512345 │ │ ├── hs123123cccc │ │ ├── qinqin123123 │ │ │ └── gaoshan12345 │ │ │ ├── cccwfmccc555 │ │ │ ├── cccgqp555555 │ │ │ └── wangfj123123 │ │ ├── hll12345cccc │ │ ├── mmq12345cccc │ │ └── lyp12345cccc │ ├── fjx12345cccc │ ├── cui1234ccccc │ │ ├── zsh111222333 │ │ ├── fu1234512345 │ │ │ ├── zy1234512345 │ │ │ └── sjzzht131413 │ │ └── guo12345cccc │ ├── yjm12345cccc │ ├── lwh12345cccc │ ├── hy1234512345 │ ├── lq1234512345 │ ├── zxehlfy12345 │ ├── hong12345ccc │ ├── liuhong12345 │ ├── fsq12345cccc │ └── wyd12345cccc ├── shuluchao125 │ └── zhouzhen1234 │ └── shuqian12345 │ └── shuyue123123 ├── srlcccccc123 │ ├── a12341234123 │ │ └── a12341234121 │ └── chen12345ccc ├── sxkwk1314131 │ ├── zwq131411413 │ └── szhwk1314131 ├── sygs12345ljd │ ├── n21tlj123123 │ └── sygsljd12345 │ └── sygs12345stt │ ├── leibo1313131 │ ├── liuwei123455 │ ├── liankanglian │ ├── abc54321xyzm │ │ └── wyx12345abcd │ └── wahaa1231233 ├── syn112233445 │ └── syn111222333 ├── taishanshi22 │ └── qingsong2233 ├── w12345123452 │ └── w12345123453 │ └── zlx123451234 ├── wang12345ccc │ ├── wme12345cccc │ ├── gxm12345cccc │ ├── song12345ccc │ ├── qingliangccc │ ├── gjzgccc12345 │ ├── xinping12345 │ └── gege12345ccc ├── wanganle1234 │ └── wanganle2345 │ ├── wanganle3345 │ ├── liguangb1234 │ ├── lufang123123 │ ├── lihuaidong55 │ ├── maruxiang123 │ ├── yushengye123 │ ├── limeixia1234 │ │ └── zhouyimin123 │ ├── liuhui123123 │ ├── xuhao1234123 │ └── yangguix1234 ├── wangfj123123 │ └── fengjv123123 ├── wangxt141313 │ └── mazhiling113 ├── wd1112223333 │ └── gf1213141555 ├── wjx123412345 │ └── wjx123123123 ├── wozhanglixia │ ├── panxiangjiao │ │ └── cccjxn122334 │ ├── momodadadada │ │ └── gxfgxfgxfgxf │ │ └── ccwccwccwccw │ ├── chengfang113 │ │ ├── cccyjqaaaccc │ │ └── chenying1234 │ ├── smh123443211 │ ├── aadfeddaa123 │ ├── zx2342111111 │ ├── luoxiaogan11 │ ├── abcabcd12345 │ ├── syxlwba12345 │ │ ├── aryczwz12345 │ │ └── wrr111222333 │ ├── sdc421254321 │ │ ├── zclabcd51424 │ │ ├── aaazzza12345 │ │ │ ├── wb1234123433 │ │ │ └── zzzaaac12345 │ │ ├── cncbk4212543 │ │ ├── yuangang1234 │ │ ├── abcabcdef123 │ │ ├── lyg411511114 │ │ ├── hhanbin12345 │ │ ├── sunxiaoyan22 │ │ ├── liu1234lin55 │ │ ├── aaayyy542131 │ │ ├── a4313233534a │ │ ├── wrp123412345 │ │ ├── caihuang1234 │ │ ├── guanpeng1111 │ │ ├── xutengzhan11 │ │ └── abcdmfhg1234 │ ├── ql1234512345 │ ├── abcabcabc123 │ ├── ll1234512345 │ ├── lhmtyhjrwx12 │ ├── wangfeng3333 │ ├── zhangheran13 │ ├── minghuan1122 │ ├── azsxdcf55555 │ ├── huchengbo123 │ ├── nan134141434 │ ├── aaaccc111111 │ ├── mp1234512345 │ ├── byp121212121 │ └── a13333333333 ├── wrr111222333 │ └── wrrr11222333 │ ├── yu1234512345 │ ├── ty1112223335 │ ├── rt1425142533 │ ├── we1122334455 │ ├── cd1234554321 │ ├── qb1234512345 │ │ └── qb5432154321 │ ├── qb1231234545 │ ├── asdfghjkl555 │ ├── as1122334455 │ └── asdzxc555555 ├── wushuping123 │ └── asdf12312313 ├── wwwwyyyyllll │ └── llllqqqqffff │ └── hhhhjjjjyyyy │ └── ggggxxxxhhhh ├── wx1351111213 │ ├── az2222222222 │ └── bb1234512345 ├── wxb555555555 │ └── xcp555555555 ├── wyz123123ccc │ └── zxq222413413 ├── x12222222222 │ └── x11222222222 │ └── cad123412341 ├── xdanlin12123 │ └── bgbgbg223333 ├── xtsxtsxts123 │ └── xtsxtsxts333 ├── xusqbao12131 │ ├── xhxhxhxh2222 │ ├── tdtdtd111122 │ ├── tdhao1111222 │ ├── ccctoken2222 │ └── aaacccaa1234 ├── xwy123123123 │ └── xwy111122222 ├── xy2222222222 │ └── qq3333322222 ├── xzh111111111 │ └── xzh222222222 ├── yry111222333 │ └── yry222333444 ├── ysmzqj111222 │ └── cxvin1122345 ├── yushengye123 │ ├── xuyanqing555 │ └── xuyanqing123 ├── z13133351311 │ ├── asdhkjz13223 │ ├── h11122334455 │ ├── yiyi12312312 │ ├── guoguo543211 │ ├── zhenxuzhao21 │ ├── lf1234554321 │ └── zsc111111111 ├── zd1122334455 │ └── zd1234512345 ├── zhangdongcqg │ └── qianhaiyan43 ├── zhanghaiping │ └── ccczhp123123 ├── zhanglei1111 │ ├── zhanglei2222 │ └── houxingyun11 ├── zhimengke125 │ └── z11122233345 ├── zixiong55555 │ ├── wx1234512345 │ ├── gganjianying │ └── youmm3333333 ├── zjtzsm112345 │ └── zjtzsm122345 ├── zsh111222333 │ ├── zxa12345cccc │ │ └── wyj12345cccc │ ├── whj12345cccc │ ├── zhangpeng123 │ └── hxy111222333 ├── zxczxc123321 │ └── qwerqwer1234 ├── zy1234512345 │ └── zpg123451234 ├── zyx555111333 │ ├── yp1234512345 │ ├── yxz112131415 │ └── ffwwyy222333 └── zz12345ccccc └── neo12345cccc
然后再去,想办法,打印出树结构的图片:
>>> from anytree.exporter import DotExporter >>> # graphviz needs to be installed for the next line! >>> DotExporter(udo).to_picture("udo.png")
去试试:
【已解决】Mac中安装Python的graphviz
另外从
看到说是有更多其他的exporter
- * Dictionary Exporter
- * JSON Exporter
- * Dot Exporter
可以导出各种
>>> from collections import OrderedDict >>> exporter = DictExporter(dictcls=OrderedDict, attriter=sorted) >>> pprint(exporter.export(root)) OrderedDict([('a', 'root'), ('children', [OrderedDict([('a', 'sub0'), ('children', [OrderedDict([('a', 'sub0A'), ('b', 'foo')]), OrderedDict([('a', 'sub0B')])])]), OrderedDict([('a', 'sub1')])])])
>>> exporter = JsonExporter(indent=2, sort_keys=True) >>> print(exporter.export(root)) { "a": "root", "children": [ { "a": "sub0", "children": [ { "a": "sub0A", "b": "foo" }, { "a": "sub0B" } ] }, { "a": "sub1" } ] }
-》抽空可以去导出:
dict或json
继续写代码:
from anytree.exporter import DotExporter DotExporter(fakeRootNode).to_picture("Relation.png")
结果:
Relation.png
2.6MB 横向的,很长
![](https://www.crifan.org/files/pic/uploads/2021/09/3ffbc48a0c064c3f9cee850fd5ee08be.jpg)
放大后可以看到效果:
![](https://www.crifan.org/files/pic/uploads/2021/09/de33dad9148843779481c1b135303f6b.jpg)
![](https://www.crifan.org/files/pic/uploads/2021/09/dd5254ef08d5404ca99b7d4c9c148d26.jpg)
然后另外,再去导出json版:
dict版本是类似的,就不导出了。
exporter = JsonExporter(indent=2, sort_keys=True) print(exporter.export(root))
最后:
from anytree.exporter import DotExporter, JsonExporter jsonExporter = JsonExporter(indent=2, sort_keys=True) treeJsonStr = jsonExporter.export(fakeRootNode) treeJson = json.loads(treeJsonStr) saveJsonToFile("output/Relation.json", treeJson)
输出我们要的json了:
![](https://www.crifan.org/files/pic/uploads/2021/09/c754b843654c41179f9d29a760a94293.jpg)
![](https://www.crifan.org/files/pic/uploads/2021/09/6b8333bc17d64fa0af497e4b2d541f05.jpg)
即可。
【总结】
最后用相关代码:
from anytree import Node, RenderTree for pre, fill, node in RenderTree(fakeRootNode): # print("pre=%s,fill=%s,node=%s" % (pre, fill, node)) print("%s%s" % (pre, node.name))
输出:
akeroot0000 ├── aaaaaaaa5522 │ ├── wyj121212121 │ ├── wyf333222111 │ ├── tzf123451234 │ ├── jch123123123 │ └── ha1234512345 ├── aaaaaaaaaaay │ └── ancdefg12345 │ └── abcd12345555 。。。
用:
from anytree.exporter import DotExporter, JsonExporter treeJsonStr = jsonExporter.export(fakeRootNode) treeJson = json.loads(treeJsonStr) saveJsonToFile("output/Relation.json", treeJson)
输出:
{ "children": [ { "children": [ { "name": "wyj121212121" }, { "name": "wyf333222111" }, { "name": "tzf123451234" }, { "name": "jch123123123" }, { "name": "ha1234512345" } ], "name": "aaaaaaaa5522" }, ... { "children": [ { "name": "neo12345cccc" } ], "name": "zz12345ccccc" } ], "name": "fakeroot0000" }
用:
from anytree.exporter import DotExporter, JsonExporter DotExporter(fakeRootNode).to_picture("output/Relation.png")
输出:
树的结构的图片:
![](https://www.crifan.org/files/pic/uploads/2021/09/f78086dee9d04c639419046f43502cf1.jpg)
转载请注明:在路上 » 【已解决】anytree中打印出Tree树的结构文字版和图片版