python - 使用 networkx (python) 读取没有节点标签的 GML 文件

标签 python networkx graph-modelling-language

我有一个很长的 GML 文件(图形建模语言),我试图用 Python 中的 Networkx 读取它。 在 GML 文件中,节点没有标签,如下所示:

graph [
  node [
    id 1
  ]
  node [
    id 2
  ]
  edge [
    source 2
    target 1
    ]
  ]

读取文件时出现错误: G = nx.read_gml('simple_graph.gml')

---------------------------------------------------------------------------
NetworkXError                             Traceback (most recent call last)
<ipython-input-39-b1b319a08668> in <module>()
----> 1 G = nx.read_gml('simple_graph.gml')

<decorator-gen-319> in read_gml(path, label, destringizer)

/usr/lib/python2.7/dist-packages/networkx/utils/decorators.pyc in _open_file(func, *args, **kwargs)
    218         # Finally, we call the original function, making sure to close the fobj.
    219         try:
--> 220             result = func(*new_args, **kwargs)
    221         finally:
    222             if close_fobj:

/usr/lib/python2.7/dist-packages/networkx/readwrite/gml.pyc in read_gml(path, label, destringizer)
    208             yield line
    209 
--> 210     G = parse_gml_lines(filter_lines(path), label, destringizer)
    211     return G
    212 

/usr/lib/python2.7/dist-packages/networkx/readwrite/gml.pyc in parse_gml_lines(lines, label, destringizer)
    407             raise NetworkXError('node id %r is duplicated' % (id,))
    408         if label != 'id':
--> 409             label = pop_attr(node, 'node', 'label', i)
    410             if label in labels:
    411                 raise NetworkXError('node label %r is duplicated' % (label,))

/usr/lib/python2.7/dist-packages/networkx/readwrite/gml.pyc in pop_attr(dct, type, attr, i)
    397         except KeyError:
    398             raise NetworkXError(
--> 399                 "%s #%d has no '%s' attribute" % (type, i, attr))
    400 
    401     nodes = graph.get('node', [])

NetworkXError: node #0 has no 'label' attribute

我看到它提示是因为节点没有标签。从 GML 的文档中,我认为标签不是强制性的(也许我错了?)。有没有办法在没有标签的情况下读取这样的文件?或者我应该更改我的 gml 文件? 感谢您的帮助!

最佳答案

如果你想在 GML 中使用 id 属性来标记节点,你可以为 nx.read_gml 参数指定标签属性,如下所示。

G = nx.read_gml('simple_graph.gml', label='id')

关于python - 使用 networkx (python) 读取没有节点标签的 GML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39200898/

相关文章:

python - Networkx 用两条边而不是一条来显示循环

python - 如何从networkx获得边缘以不同的颜色

python - 使用 Pymssql 将具有 Null 值的记录插入 SQL Server 时出错

python - 制作最后一段 - 事件指针

python - 在 Python 中使用两个数据框进行简单查找

python - Pandas 值(value)错误: invalid literal for int() with base 10: ''

python - 设置 NetworkX 边长

matlab - 在matlab中将GML文件转换为邻接矩阵

graph - 如何在Lemon中使用GML文件?