如何从read_dot

时间:2017-08-14 21:09:36

标签: python graph networkx dot

我有一个代表有向图(DiGraph)的点文件。我希望在networkx DiGraph对象中读取它。 我使用了networkx.drawing.nx_agraph.read_dot(PATH),但此函数返回的图表中的节点只是简单的'str'类型,并且标签在翻译中都丢失了

Dotfile是这样的:

digraph code {
    graph [bgcolor=white fontname="Courier" splines="ortho"];
    node [fillcolor=gray style=filled shape=box];
    edge [arrowhead="normal"];
    "0x000052c0" -> "0x00003a40" [label="section..text" color="red" URL="section..text/0x00003a40"];
    "0x00003a40" [label="section..text" URL="section..text/0x00003a40"];
    "0x000052c0" -> "0x0021ee08" [label="reloc.__libc_start_main_8" color="green" URL="reloc.__libc_start_main_8/0x0021ee08"];
    "0x0021ee08" [label="reloc.__libc_start_main_8" URL="reloc.__libc_start_main_8/0x0021ee08"];
}

我写这篇文章是为了这个:

import networkx as nx
G = nx.drawing.nx_agraph.read_dot(DOT_GRAPH_NAME)

有没有人有更好的方法?我可以写自己的,但最好有一些工作和测试。

1 个答案:

答案 0 :(得分:0)

从源代码文件networkx/drawing/nx_agraph.py,可以找到以下代码:

PREDICATE: kotlin.Int.() -> kotlin.Boolean 
OTHERPREDICATE: (kotlin.Int) -> kotlin.Boolean 
EQUALITY: false

因此,还解析了节点属性。您可以通过

找到此字段
# add nodes, attributes to N.node_attr
for n in A.nodes():
    str_attr = {str(k): v for k, v in n.attr.items()}
    N.add_node(str(n), **str_attr)
...
N.graph['node'] = dict(A.node_attr)

就我而言,我可以通过

获得标签
vars(g)