python画网络关系 节点和边存在文件里_通过networkx和python在图中添加节点和边

本文档介绍了如何使用Python的NetworkX库从文件中读取节点和边数据来创建网络关系图。重点在于修复了因预先分配固定大小列表导致的错误,并演示了如何正确添加节点和边到图中。
摘要由CSDN通过智能技术生成

你看到的问题是由IPList = [[] for i in range (20)]

当len(pkts)小于20时,parsePcap()返回一个或多个空列表的序列列表:

^{pr2}$

当parseOutput传递给g.add_nodes_from时,

您将收到回溯错误消息:File "/usr/local/lib/python2.7/dist-packages/networkx/classes/graph.py", line 429, in add_nodes_from

nn,ndict = n

ValueError: need more than 0 values to unpack

回想起来,如果您仔细考虑错误消息

您可以看到它告诉您,n有0个值要解压缩。这使得

判断节点n是否为空列表:In [136]: nn, ndict = []

ValueError: need more than 0 values to unpack

空列表来自parseOutput。在

不是预先分配固定大小的列表:IPList = [[] for i in range (20)]

在Python中执行此操作的首选方法是使用append方法:def parsePcap():

IPList = []

for pkt in pkts:

if pkt.haslayer(IP):

x = pkt.getlayer(IP).src

y = pkt.getlayer(IP).dst

IPList.append((x, y))

return IPList

这更容易理解,因为您不需要操心索引

数字并递增一个计数器变量。此外,它允许您处理

pkts中任意数量的项,而不必首先知道

pkts。在

另一件需要修正的事情是nodeList通常不是

与edgeList相同。在

如果要声明nodeList,

nodeList应该是一个IP地址的iterable,以及edgeList

应该是元组的iterable,如parseOutput:nodeList = set([item for pair in parseOutput for item in pair])

print(nodeList)

# set(['216.58.208.206', '216.58.208.227', '172.16.254.128',

# '216.58.208.226', '8.8.8.8'])

但是,由于edgeList中也提到了所有的节点,因此可以忽略声明这些节点而只使用edgeList = parseOutput

g.add_edges_from(edgeList)

g.add_edges_from将隐式添加节点。在import matplotlib.pyplot as plt

import networkx as nx

parseOutput = [

('172.16.254.128', '216.58.208.206'),

('216.58.208.206', '172.16.254.128'),

('172.16.254.128', '216.58.208.226'),

('216.58.208.226', '172.16.254.128'),

('172.16.254.128', '8.8.8.8'),

('8.8.8.8', '172.16.254.128'),

('172.16.254.128', '216.58.208.227'),

('172.16.254.128', '216.58.208.227'),

('216.58.208.227', '172.16.254.128'),

('172.16.254.128', '216.58.208.227'),

('172.16.254.128', '216.58.208.227'),]

g = nx.Graph()

edgeList = parseOutput

g.add_edges_from(edgeList)

pos = nx.spring_layout(g,scale=1) #default to scale=1

nx.draw(g,pos, with_labels=True)

plt.show()

收益率

{1美元^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值