2013-02-08 90 views
2

我有一个GML(图形(不是涂鸦)建模语言)文件,我想从中创建一个ID到标签的映射。由于我的列表操作似乎不起作用,我对如何做到这一点感到茫然。我尝试使用指定如何使用两个分隔符的示例,但它不适用于我的文件。从GML文件中提取数据

有人能指导我吗?

的GML文件安排如下:

graph [ 
    node [ 
    id 0 
    label "24" 
    ] 
    node [ 
    id 1 
    label "25" 
    ] 
    node [ 
    id 2 
    label "26" 
    ] 
    node [ 
    id 3 
    label "27" 
    ] 
    node [ 
    id 4 
    label "20" 
    ] 
    node [ 
    id 5 
    label "21" 
    ] 
(... some more nodes) 
    edge [ 
    source 0 
    target 75 
    weight 4 
    ] 
    edge [ 
    source 0 
    target 68 
    weight 2 
    ] 
(many more edges) 
] 

我想在每个节点块以提取数据并创建节点ID的映射到该节点的标签。例如,第一个节点的映射将是0-> 24,依此类推。我并不担心边缘信息。

在此先感谢您的帮助。

+0

['pygml'](http://code.google.com/p/pygml/source/browse/trunk/pygml.py)? – 2013-02-08 19:17:11

+0

你能指点我的任何文件,用法或任何东西?我试着找到它,但唯一能找到的就是Google Code上的一些代码。我是Python的新手,所以请原谅我的天真。 :) – adwaraki 2013-02-08 19:18:18

+0

我应该在邮件本身澄清,我的错误。 GML含义是图形建模语言,而不是涂鸦建模语言。 – adwaraki 2013-02-08 19:24:38

回答

6

如果你可以使用NetworkX(蟒蛇)你可以读取文件(t.gml是您的文件),像这样的,并得到映射

In [1]: import networkx as nx 

In [2]: G = nx.read_gml('t.gml') 

In [3]: G.node 
Out[3]: 
{0: {'id': 0, 'label': u'24'}, 
1: {'id': 1, 'label': u'25'}, 
2: {'id': 2, 'label': u'26'}, 
3: {'id': 3, 'label': u'27'}, 
4: {'id': 4, 'label': u'20'}, 
5: {'id': 5, 'label': u'21'}} 

例如

In [4]: G.node[0]['label'] 
Out[4]: u'24' 
+0

非常感谢Aric。 – adwaraki 2013-02-09 20:43:17

+0

如何使用nx.read_gml更改文件路径?我不确定它在哪里搜索gml文件,但似乎无法找到它。 – mlg4080 2015-02-01 05:28:52