python实现树结构的json⽂件_python实现树形结构的json⽂件需求:
在做树形可视化图形时,需要相应的json⽂件为树形结构。本例为将所有IP进⾏⼀个统计,合并同类项,之后根据IP的四个字段分为四层。第⼀层为第⼀个字段,第⼆层为第⼆个字段,以此类推,总共四层。
数据格式类似下图:
image.png
实现思路:
1.将IP统计后的结果以dataframe的数据结构存储;
2.定义两种节点:
⾮叶⼦节点:
node={"name":"","children":[]}
叶⼦节点:
leaf={"name":"","size":0}
对所有IP进⾏⼀次遍历,遍历所有IP的第⼀个字段,得到不同的第⼀个字段,并⽣成⼀个⾮叶⼦节点。加⼊列表中。
对所有IP进⾏第⼆次遍历,遍历第⼆个字段,⽣成相应的⾮叶⼦节点,并匹配对应的第⼀个字段,插⼊到列表中。
对所有IP进⾏第三次遍历,遍历第三个字段,⽣成相应的⾮叶⼦节点,并分别匹配第⼀个字段和第⼆个字段,插⼊到列表中。
对所有IP进⾏第四次遍历,遍历第四个字段,⽣成相应的叶⼦节点,并分别匹配第⼀个字段、第⼆个字段、第三个字段,插⼊到列表中。
最后做格式的微调,如单引号变为双引号等。
实现代码:
clonenode是什么品牌# -*- coding: utf-8 -*-
"""
Created on Wed Nov 29 15:06:39 2017
@author: gly
"""
import pandas as pd
ad_csv('output.csv')
#源IP计数
srcIpCounts=df[u'firstSeenSrcIp'].value_counts()
srcIpCounts=pd.DataFrame(srcIpCounts)
#定义节点,node为⾮叶⼦节点,leaf为叶⼦节点
node={"name":"","children":[]}
leaf={"name":"","size":0}
result=[]
#第⼀次遍历,计算IP的所有第⼀个数值的种类并⽣成Node节点
ip1Num=[]
for index,row in srcIpCounts.iterrows():
name=index.split(".")[0]
if name not in ip1Num:
ip1Num.append(name)
node={"name":name,"children":[]}
printscreen键result.append(node)
strcpy函数的功能和使用#第⼆次遍历,计算IP前两位的不同种类并⽣成Node节点归到第⼀次遍历对应的结果中ip2Num=[]
for index,row in srcIpCounts.iterrows():
name1=index.split(".")[0]
name2='.'.join(index.split(".")[0:2])
if name2 not in ip2Num:
ip2Num.append(name2)
node={"name":name2,"children":[]}
for i in result:
if i["name"]==name1:
i["children"].append(node)
break
#第三次遍历,计算IP前三位的不同种类并⽣成Node节点归到第⼆次遍历对应的结果中ip3Num=[]
for index,row in srcIpCounts.iterrows():
name1=index.split(".")[0]
name2='.'.join(index.split(".")[0:2])
name3='.'.join(index.split(".")[0:3])
if name3 not in ip3Num:
ip3Num.append(name3)
node={"name":name3,"children":[]}
for i in result:
if i["name"]==name1:
for j in i["children"]:
if j["name"]==name2:
j["children"].append(node)
解析xml失败的原因
break
python解析json文件#第四次遍历,计算IP所有位的不同种类并⽣成leaf节点归到上⼀次遍历对应的结果中for index,row in srcIpCounts.iterrows():
name1=index.split(".")[0]
name2='.'.join(index.split(".")[0:2])
name3='.'.join(index.split(".")[0:3])
name4='.'.join(index.split(".")[0:4])
leaf={"name":name4,"size":row.values[0]}
for i in result:
if i["name"]==name1:
for j in i["children"]:
if j["name"]==name2:java源代码文件的扩展名为
for k in j["children"]:
if k["name"]==name3:
k["children"].append(leaf)
break
#拼接成最后的结果
out={"name":"all","children":'a'}
out["children"]=result
#将⾥⾯的单引号改为双引号
out=str(out)
#print type(out)
place("'","\"")
#最后的text⽂件转换为json即可。
with open('', 'w') as fout:
fout.write(out)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论