我有一个代表有向图(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)
有没有人有更好的方法?我可以写自己的,但最好有一些工作和测试。
答案 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)