我正在编写从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'})]

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

有帮助吗?

解决方案

如果未指定一个网络gexf Writer,则会生成一个边界ID-整数。由于您在没有ID的情况下添加了第二个边缘(边缘1,2),因此使用了0的ID,与您的第一个边缘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})]
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top