Python Networkx解析gml写入不可用的gml文件

Python Networkx解析gml写入不可用的gml文件,python,networkx,gml,cytoscape,Python,Networkx,Gml,Cytoscape,我一直在尝试解析networkx gml的一些附加属性以供以后使用,但遇到了一个问题 当从Cytoscape获得一个gml文件时,networkx输出一个它自己无法读取的gml文件 即Cytoscape->进入networkx->输出->进入networkx->错误: pyparsing.ParseException: Expected "]" (at char 1116756), (line:71732, col:3) 现在,该错误在节点之后请求一个额外的“]值(即使图形忽略边),如果您这样

我一直在尝试解析networkx gml的一些附加属性以供以后使用,但遇到了一个问题

当从Cytoscape获得一个gml文件时,networkx输出一个它自己无法读取的gml文件

即Cytoscape->进入networkx->输出->进入networkx->错误:

pyparsing.ParseException: Expected "]" (at char 1116756), (line:71732, col:3)
现在,该错误在节点之后请求一个额外的“]值(即使图形忽略边),如果您这样做,图形将正常工作。但是,它不再有任何边缘

为了全面测试这一点,我执行了“Cytoscape->Into networkx->Output”,根本不更改代码,只需:

DG = nx.read_gml("KeggComplete.gml", relabel = True)
nx.write_gml(DG, "KeggCompleteEng.gml")
exit()
然后用以下内容阅读:

BasicGraph = nx.read_gml("KeggCompleteEng.gml", relabel = True)
误差仍然是可重复的。所以我认为这与networkx编写gml文件的方式有关

我使用的两个文件是:


如果有人能深入了解为什么会发生这种情况,我们将不胜感激

Pyparsing不是识别何时发生解析错误的最聪明的库。该库的较新版本确实支持一些更好的错误识别,但它们需要对解析器进行一些更新才能获得这些信息

在没有看到解析器的情况下,根据您的描述,解析器似乎希望看到以下内容:

[
  [
  bunch of nodes...
  ]
  [
  optional bunch of edges...
  ]
]
所发生的是,它成功地通过了“节点束…”,然后在“可选的边束…”部分的一条边中发现了一些语法问题。因为这是可选的,所以只要在节点之后有一个结束']',事情仍然有效。这就是为什么会收到pyparsing异常消息。但真正的问题是其中一个边缘有一个打字错误


要诊断此问题,请尝试仅为解析器提供前几条边。然后继续添加越来越多的边,直到出现pyparsing错误-最近添加的边包含关键语法错误。

这是NetworkX在生成嵌套属性(本例中为边图形数据)时出现的错误。 错误地将一组额外的引号添加到“Line”属性中

修复程序已作为此拉取请求的一部分合并: