Python 在networkX中读取gml文件时,获取ParseException:Expected";]&引用;
我试图从networkX读取一个GML(图形建模语言)文件,但它返回一个ParseError 我只写了几行代码:Python 在networkX中读取gml文件时,获取ParseException:Expected";]&引用;,python,networkx,parseexception,graph-modelling-language,Python,Networkx,Parseexception,Graph Modelling Language,我试图从networkX读取一个GML(图形建模语言)文件,但它返回一个ParseError 我只写了几行代码: import networkx as nx G = nx.read_gml('test.gml') print G.node 这是GML文件: graph [ directed 1 node [ id 0 label 1 shape name "square" center (132, 258) ] node [ i
import networkx as nx
G = nx.read_gml('test.gml')
print G.node
这是GML文件:
graph [
directed 1
node [
id 0
label 1
shape
name "square"
center (132, 258)
]
node [
id 1
label 2
shape
name "triangle"
center (132, 128)
]
edge [
source 0
target 1
relation "below"
]
edge [
source 1
target 0
relation "above"
]
]
这就是我得到的错误:
ParseException: Expected "]" (at char 23), (line:3, col:3)
但是,我没有发现任何]
缺失的问题
解析器与您的输入混淆。我以前从未使用过gml,但我一次构建一个gml文件,发现了两个问题
形状
键没有值(132258)
(132258)
是无效的,我认为没有值也是无效的
尝试下面注释掉的gml,它将加载
graph [
directed 1
node [
id 0
label 1
#shape
name "square"
#center (132, 258)
]
node [
id 1
label 2
#shape
name "triangle"
#center (132, 128)
]
edge [
source 0
target 1
relation "below"
]
edge [
source 1
target 0
relation "above"
]
]
替代解决方案
我发现nx.write\u gml
不支持包括嵌套图在内的混合图。因此,即使您正确地创建了图形,它也不会正确地将其写入文件
这里有一个替代的平面结构,它将写入,尽管我不知道这是否是一种构造数据的好方法。它制作的标签可以用来标识每个形状的角
import networkx as nx
dg = nx.DiGraph()
# square data
square_label = '0'
square_corners = [(0, 0), (0, 1), (1, 1), (1, 0)]
# main square node
dg.add_node(square_label, name='square')
# shape data for square
base_id = '{0}.corners.'.format(square_label)
last_corner_id = '{0}{1}'.format(base_id, len(square_corners)-1)
for i, corner in enumerate(square_corners):
x, y = corner
corner_id = '{0}{1}'.format(base_id, i)
dg.add_node(corner_id, x=x, y=y)
# instead of linking the square to every corner, you might want to link
# only to one corner and handle the cycle with edges between the corners
# or whatever. there are many ways it could be done I guess.
dg.add_edge(square_label, corner_id) # link from square to each corner
dg.add_edge(last_corner_id, corner_id) # corner to corner edges
last_corner_id = corner_id
nx.write_gml(dg, 'test.gml')
输出:
graph [
directed 1
node [
id 1
label "0"
name "square"
]
node [
id 0
label "0.corners.1"
y 1
x 0
]
node [
id 2
label "0.corners.3"
y 0
x 1
]
node [
id 3
label "0.corners.2"
y 1
x 1
]
node [
id 4
label "0.corners.0"
y 0
x 0
]
edge [
source 0
target 3
]
edge [
source 1
target 0
]
edge [
source 1
target 4
]
edge [
source 1
target 2
]
edge [
source 1
target 3
]
edge [
source 2
target 4
]
edge [
source 3
target 2
]
edge [
source 4
target 0
]
]
眼前的问题
解析器与您的输入混淆。我以前从未使用过gml,但我一次构建一个gml文件,发现了两个问题
形状
键没有值(132258)
(132258)
是无效的,我认为没有值也是无效的
尝试下面注释掉的gml,它将加载
graph [
directed 1
node [
id 0
label 1
#shape
name "square"
#center (132, 258)
]
node [
id 1
label 2
#shape
name "triangle"
#center (132, 128)
]
edge [
source 0
target 1
relation "below"
]
edge [
source 1
target 0
relation "above"
]
]
替代解决方案
我发现nx.write\u gml
不支持包括嵌套图在内的混合图。因此,即使您正确地创建了图形,它也不会正确地将其写入文件
这里有一个替代的平面结构,它将写入,尽管我不知道这是否是一种构造数据的好方法。它制作的标签可以用来标识每个形状的角
import networkx as nx
dg = nx.DiGraph()
# square data
square_label = '0'
square_corners = [(0, 0), (0, 1), (1, 1), (1, 0)]
# main square node
dg.add_node(square_label, name='square')
# shape data for square
base_id = '{0}.corners.'.format(square_label)
last_corner_id = '{0}{1}'.format(base_id, len(square_corners)-1)
for i, corner in enumerate(square_corners):
x, y = corner
corner_id = '{0}{1}'.format(base_id, i)
dg.add_node(corner_id, x=x, y=y)
# instead of linking the square to every corner, you might want to link
# only to one corner and handle the cycle with edges between the corners
# or whatever. there are many ways it could be done I guess.
dg.add_edge(square_label, corner_id) # link from square to each corner
dg.add_edge(last_corner_id, corner_id) # corner to corner edges
last_corner_id = corner_id
nx.write_gml(dg, 'test.gml')
输出:
graph [
directed 1
node [
id 1
label "0"
name "square"
]
node [
id 0
label "0.corners.1"
y 1
x 0
]
node [
id 2
label "0.corners.3"
y 0
x 1
]
node [
id 3
label "0.corners.2"
y 1
x 1
]
node [
id 4
label "0.corners.0"
y 0
x 0
]
edge [
source 0
target 3
]
edge [
source 1
target 0
]
edge [
source 1
target 4
]
edge [
source 1
target 2
]
edge [
source 1
target 3
]
edge [
source 2
target 4
]
edge [
source 3
target 2
]
edge [
source 4
target 0
]
]
眼前的问题
解析器与您的输入混淆。我以前从未使用过gml,但我一次构建一个gml文件,发现了两个问题
形状
键没有值(132258)
(132258)
是无效的,我认为没有值也是无效的
尝试下面注释掉的gml,它将加载
graph [
directed 1
node [
id 0
label 1
#shape
name "square"
#center (132, 258)
]
node [
id 1
label 2
#shape
name "triangle"
#center (132, 128)
]
edge [
source 0
target 1
relation "below"
]
edge [
source 1
target 0
relation "above"
]
]
替代解决方案
我发现nx.write\u gml
不支持包括嵌套图在内的混合图。因此,即使您正确地创建了图形,它也不会正确地将其写入文件
这里有一个替代的平面结构,它将写入,尽管我不知道这是否是一种构造数据的好方法。它制作的标签可以用来标识每个形状的角
import networkx as nx
dg = nx.DiGraph()
# square data
square_label = '0'
square_corners = [(0, 0), (0, 1), (1, 1), (1, 0)]
# main square node
dg.add_node(square_label, name='square')
# shape data for square
base_id = '{0}.corners.'.format(square_label)
last_corner_id = '{0}{1}'.format(base_id, len(square_corners)-1)
for i, corner in enumerate(square_corners):
x, y = corner
corner_id = '{0}{1}'.format(base_id, i)
dg.add_node(corner_id, x=x, y=y)
# instead of linking the square to every corner, you might want to link
# only to one corner and handle the cycle with edges between the corners
# or whatever. there are many ways it could be done I guess.
dg.add_edge(square_label, corner_id) # link from square to each corner
dg.add_edge(last_corner_id, corner_id) # corner to corner edges
last_corner_id = corner_id
nx.write_gml(dg, 'test.gml')
输出:
graph [
directed 1
node [
id 1
label "0"
name "square"
]
node [
id 0
label "0.corners.1"
y 1
x 0
]
node [
id 2
label "0.corners.3"
y 0
x 1
]
node [
id 3
label "0.corners.2"
y 1
x 1
]
node [
id 4
label "0.corners.0"
y 0
x 0
]
edge [
source 0
target 3
]
edge [
source 1
target 0
]
edge [
source 1
target 4
]
edge [
source 1
target 2
]
edge [
source 1
target 3
]
edge [
source 2
target 4
]
edge [
source 3
target 2
]
edge [
source 4
target 0
]
]
眼前的问题
解析器与您的输入混淆。我以前从未使用过gml,但我一次构建一个gml文件,发现了两个问题
形状
键没有值(132258)
(132258)
是无效的,我认为没有值也是无效的
尝试下面注释掉的gml,它将加载
graph [
directed 1
node [
id 0
label 1
#shape
name "square"
#center (132, 258)
]
node [
id 1
label 2
#shape
name "triangle"
#center (132, 128)
]
edge [
source 0
target 1
relation "below"
]
edge [
source 1
target 0
relation "above"
]
]
替代解决方案
我发现nx.write\u gml
不支持包括嵌套图在内的混合图。因此,即使您正确地创建了图形,它也不会正确地将其写入文件
这里有一个替代的平面结构,它将写入,尽管我不知道这是否是一种构造数据的好方法。它制作的标签可以用来标识每个形状的角
import networkx as nx
dg = nx.DiGraph()
# square data
square_label = '0'
square_corners = [(0, 0), (0, 1), (1, 1), (1, 0)]
# main square node
dg.add_node(square_label, name='square')
# shape data for square
base_id = '{0}.corners.'.format(square_label)
last_corner_id = '{0}{1}'.format(base_id, len(square_corners)-1)
for i, corner in enumerate(square_corners):
x, y = corner
corner_id = '{0}{1}'.format(base_id, i)
dg.add_node(corner_id, x=x, y=y)
# instead of linking the square to every corner, you might want to link
# only to one corner and handle the cycle with edges between the corners
# or whatever. there are many ways it could be done I guess.
dg.add_edge(square_label, corner_id) # link from square to each corner
dg.add_edge(last_corner_id, corner_id) # corner to corner edges
last_corner_id = corner_id
nx.write_gml(dg, 'test.gml')
输出:
graph [
directed 1
node [
id 1
label "0"
name "square"
]
node [
id 0
label "0.corners.1"
y 1
x 0
]
node [
id 2
label "0.corners.3"
y 0
x 1
]
node [
id 3
label "0.corners.2"
y 1
x 1
]
node [
id 4
label "0.corners.0"
y 0
x 0
]
edge [
source 0
target 3
]
edge [
source 1
target 0
]
edge [
source 1
target 4
]
edge [
source 1
target 2
]
edge [
source 1
target 3
]
edge [
source 2
target 4
]
edge [
source 3
target 2
]
edge [
source 4
target 0
]
]
形状的中心不是问题,因为我可以从图形中删除它们。GML文件中不需要它们。而形状真的很重要。它是构成保存为节点的形状的角点的子图。在主python程序中,我保存了一个名为“三角形”的节点,其形状具有角点的子图。所以我不知道为什么它没有保存到GML文件中
G.add_节点(count,name='triangle',shape=tr)
。Myabe这是错的,我不知道。tr子图(…)
中的tr
是什么?除非它是我上面写的4种类型之一,否则我很确定这是无效的。是否确实要在三角形节点中放置一个子图?我认为你必须做一个单独的G1。添加节点(G2,…)
来做到这一点。想象一个层次结构的不同层:在顶层应该有一个只包含s的图G