在networkX中读取gml文件获取ParseException:应为“]”

2024-06-16 09:08:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从networkX读取GML(图形建模语言)文件,但它返回ParseError。在

我只写了几行代码:

import networkx as nx
G = nx.read_gml('test.gml')
print G.node

这是GML文件:

^{pr2}$

这是我得到的错误:

ParseException: Expected "]" (at char 23), (line:3, col:3)

但是,我没有看到任何]丢失


Tags: 文件代码testimportnetworkx图形readas
1条回答
网友
1楼 · 发布于 2024-06-16 09:08:47

眼前的问题

解析器正在与您的输入混淆。我以前从来没有使用过gml,但是我一次建立了一个gml文件,发现了两个问题。在

  1. 没有值的shape
  2. 具有类似元组值的键 (132, 258)

假设this reference是正确的,有4种可能的值类型:

A value may have one out of four possible types, an integer (type gml$ _$int), a double (type gml$ _$double), a string (type gml$ _$string), or a list of GML objects (type gml$ _$list).

因此(132, 258)是无效的,我相信没有值也是无效的。在

下面的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_gml不支持混合图,包括嵌套图。因此,即使您正确地创建了图形,它也不会正确地将其写入文件。在

这里有一个可供选择的平面结构,尽管我不知道这是否是一种构造数据的好方法。它制作的标签可以用来标识每个形状的角。在

^{pr2}$

输出:

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
  ]
]

相关问题 更多 >