在一个点文件中解析多个有向图

时间:2011-02-28 22:58:35

标签: python dot

我正在尝试以DOT格式处理和渲染一些图形。 我拥有的点文件很大(~300MB),它包含多个有向图

digraph 1 {...}
digraph 2 {...}
digraph 3 {...}

我有两个问题:
1.是否可以使用渲染仅1个有向图而不是整个图形?
dot -3 -Tps mygraph.dot -o out.ps这样只能渲染有关图3的东西?

2.处理点阵格式的最佳Python库是什么?(其他语言也可以接受)
这是我试过的两个,但还不够好 pydot 它在导入后给了我一个有向图列表,这很好,但它不处理“。”在节点名称中。例如,nd.nd [label="nd_node"]将失败

pygraphviz 它确实处理“。”,但只在文件中给出多个图形定义时导入有向图1 :(

2 个答案:

答案 0 :(得分:2)

不确定这是否是您想要的,但您只需编写一个简单的解析器,或者您想要调用的任何解析器。 pygraphviz只需读取和解析文件输入,就像输入字符串一样。

因此,代码示例将是:

f = open(filename, 'r')
graph = [[]]
while True:
    line = f.readline()
    if not line:
        break
    if declare_new_graph(line):
        graph.append([])
    graph[-1].append(line)

#now you have a list of graphs
#each is a list of lines
#with first line containing the name
#to get the string representation of graph "i"
str = '\n'.join(graph[i])

答案 1 :(得分:1)

由于您有dot,因此您还应该拥有gvpr图表处理工具。您可以使用简单的gvpr脚本打印第三个图表,如下所示:

BEGIN { int count = 0; }
BEG_G {
    count = count + 1;
    if(count == 3) {
        write($G);
    }
}

然后,您可以将其用作源过滤器:

cat mygraph.dot | gvpr -f thirdgraph.gv | dot -Tps -o out.ps