Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在networkX中读取gml文件时,获取ParseException:Expected";]&引用;_Python_Networkx_Parseexception_Graph Modelling Language - Fatal编程技术网

Python 在networkX中读取gml文件时,获取ParseException:Expected";]&引用;

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

我试图从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 [
    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)
  • 假设这是正确的,则有4种可能的值类型:

    一个值可能有四种类型中的一种,即整数(gml类型)$ _$int)、双精度(键入gml$\u$double)、字符串(键入gml$ _$string)或GML对象列表(键入GML$\u$list)

    因此,
    (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)
  • 假设这是正确的,则有4种可能的值类型:

    一个值可能有四种类型中的一种,即整数(gml类型)$ _$int)、双精度(键入gml$\u$double)、字符串(键入gml$ _$string)或GML对象列表(键入GML$\u$list)

    因此,
    (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)
  • 假设这是正确的,则有4种可能的值类型:

    一个值可能有四种类型中的一种,即整数(gml类型)$ _$int)、双精度(键入gml$\u$double)、字符串(键入gml$ _$string)或GML对象列表(键入GML$\u$list)

    因此,
    (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)
  • 假设这是正确的,则有4种可能的值类型:

    一个值可能有四种类型中的一种,即整数(gml类型)$ _$int)、双精度(键入gml$\u$double)、字符串(键入gml$ _$string)或GML对象列表(键入GML$\u$list)

    因此,
    (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