0

我正在编写从 gexf 格式读取图形、添加节点和边并将它们写回 gexf 的脚本。我的问题是 write_gexf 正在给我添加边缘 id 的边缘,这些边缘 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'})]

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

4

1 回答 1

1

NetworkX GEXF 编写器生成一个边缘 id - 从 0 开始的整数 - 如果未指定一个。由于您添加了没有 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})]
于 2013-11-07T23:52:45.750 回答