读取GML图时出现意外错误

时间:2015-10-01 19:22:18

标签: python-3.4 networkx archlinux

我已下载包含dolphins social network的gml文件。

前段时间我在Windows7机器上对运行python 3.4和 networkx 1.9 的网络进行了一些分析,但现在我在Arch linux机器上运行(使用相同版本的python但是< strong>使用networkx 1.10 )并在尝试读取文件时发现问题。

这是用于读取文件的代码:

import networkx as nx
nx.read_gml("dolphins.gml")

这是错误的堆栈跟踪:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 2, in read_gml
File "/usr/lib/python3.4/site-packages/networkx/utils/decorators.py",line 220, in _open_file
result = func(*new_args, **kwargs)
File "/usr/lib/python3.4/site-packages/networkx/readwrite/gml.py", line 210, in read_gml
G = parse_gml_lines(filter_lines(path), label, destringizer)
File "/usr/lib/python3.4/site-packages/networkx/readwrite/gml.py", line 383, in parse_gml_lines
graph = parse_graph()
File "/usr/lib/python3.4/site-packages/networkx/readwrite/gml.py", line 372, in parse_graph
curr_token, dct = parse_kv(next(tokens))
File "/usr/lib/python3.4/site-packages/networkx/readwrite/gml.py", line 323, in tokenize
(line[pos:], lineno + 1, pos + 1))
networkx.exception.NetworkXError: cannot tokenize 'graph' at (1, 1)

你能读懂这个文件吗?有人经历过类似的问题吗?或者知道产生错误的原因是什么?

提前谢谢!

2 个答案:

答案 0 :(得分:5)

在较新版本的networkx中,gml文件应遵循更具体的格式。 dolphins.gml的问题是在开放方括号之前不应该有任何回车符。例如:

格式错误:

graph 
[
  directed 0
  node 
  [
    id 0
    label "Beak"
  ]
  .
  .
  .

格式正确:

graph [
  directed 0
  node [
    id 0
    label "Beak"
  ]
  .
  .
  .

它不关心方括号前有多少个空格,只要有多个空格并且没有回车符。

我最终做的是使用正则表达式来摆脱开头方括号之前的空格。以下正则表达式对我有用:

\s+\[

并将其替换为“[”。括号前必须至少有一个空格。

另请注意,每个节点都必须有唯一的标签。

希望它有所帮助。

答案 1 :(得分:2)

它的工作原理是将networkx版本从1.10降级到1.9.1。

希望这个答案可以帮助别人。