2016-08-29 3 views
1

У меня есть длинный файл GML (язык моделирования графиков), который я пытаюсь читать с помощью Networkx в Python. В файле GML, узлы не имеют метку, например:чтение файла GML с networkx (python) без ярлыков для узлов

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? Благодарим за помощь!

ответ

4

Если вы хотите использовать атрибут id в GML для маркировки узлов, вы можете указать атрибут метки для аргумента nx.read_gml следующим образом.

G = nx.read_gml('simple_graph.gml', label='id') 
Смежные вопросы