为什么networkx.write_gexf重用边缘ID?

时间:2013-11-07 22:33:31

标签: python networkx gephi

我正在编写脚本,这些脚本从gexf格式读取图形,添加节点和边缘,然后将它们写回gexf。我的问题是write_gexf给出的边缘是我添加的边缘ID已经存在于我读入的边缘。

例如,假设我使用单个边读入图G

>>> import networkx as nx
>>> G = nx.read_gexf('first.gexf')
>>> G.edges(data=True)
[(0,1, {'id': '0'})] 

然后我添加一条边并将图形写入gexf:

>>> G.add_edge(1,2)
>>> G.edges(data=True)
[('0','1', {'id': '0'}), (1,2, {})]
>>> nx.write_gexf(G,'second.gexf')

现在,如果我读入'second.gexf',我会得到两条'id'等于'0'的边。

>>> H = nx.read_gexf('second.gexf')
>>> H.edges(data=True)
[('0','1', {'id': '0'}), ('1','2', {'id': '0'})]

有没有办法避免这种情况?

1 个答案:

答案 0 :(得分:1)

NetworkX GEXF编写器生成边缘ID - 从0开始的整数 - 如果未指定。由于您添加了第二个没有id(边1,2)的边,因此使用了id为0的内容,它与您的第一个边ID相冲突。

这可能是一个错误,肯定会导致您的用例出现问题。 一种解决方法是在添加节点时显式设置边缘ID。

In [1]: import networkx as nx

In [2]: G = nx.read_gexf('first.gexf')

In [3]: G.edges(data=True)
Out[3]: [('1', '0', {'id': '0'})]

In [4]: G.add_edge(1,2,id=1)

In [5]: G.edges(data=True)
Out[5]: [('1', '0', {'id': '0'}), (2, 1, {'id': 1})]