Обработка XML-файла с помощью networkx в python

Мне нужно обработать файл graphml (XML), созданный графом yEd, чтобы получить атрибуты узла и ребер этого графа. Мне нужно сделать это с помощью библиотеки networkX. Я новичок в Python и никогда не использовал библиотеку networkX, поэтому любая помощь будет принята с благодарностью.

2 ответа

Решение

Это должно начать вас...

В yEd создайте график и выберите Файл> Сохранить как... в формате GraphML. Скажем, вы сохраняете его в файл "test.graphml".

Перейдите в этот каталог и запустите Python:

>>> import networkx as nx
>>> import matplotlib.pyplot as plt
>>> G = nx.read_graphml('test.graphml')
>>> nx.draw(G)
>>> plt.show()
>>> 

Кроме того, если вы хотите прочитать и обработать атрибуты узлов, вы можете перебирать их, извлекая из них данные следующим образом:

for node in G.nodes(data=True):
    print node

Это приведет к чему-то вроде этого (я создал случайный граф в yEd для проверки этого):

('n8', {'y': '178.1328125', 'x': '268.0', 'label': '8'})
('n9', {'y': '158.1328125', 'x': '0.0', 'label': '9'})
('n0', {'y': '243.1328125', 'x': '160.0', 'label': '0'})
('n1', {'y': '303.1328125', 'x': '78.0', 'label': '1'})
('n2', {'y': '82.1328125', 'x': '221.0', 'label': '2'})
('n3', {'y': '18.1328125', 'x': '114.0', 'label': '3'})
('n4', {'y': '151.1328125', 'x': '170.0', 'label': '4'})
('n5', {'y': '122.1328125', 'x': '85.0', 'label': '5'})
('n6', {'y': '344.1328125', 'x': '231.0', 'label': '6'})
('n7', {'y': '55.1328125', 'x': '290.0', 'label': '7'})

В качестве последнего примера, если кто-то хочет получить доступ к координате х узла n5, затем:

>>> print G['n5']['x']

дам тебе 85.0,

Я прочитал этот вопрос и подумал: документация для этого пакета действительно хороша, даже по стандартам Python. Вы должны действительно проверить это.

Если у вас есть файл XML графика, он выглядит так же просто, как:

>>> mygraph=nx.read_gml("path.to.file")

Другие вопросы по тегам