如何自动将文本文件转换为graphviz点文件?

时间:2014-01-12 16:58:56

标签: graph graphviz text-manipulation pygraphviz

我试图在graphviz的帮助下自动将我的文本文件转换为无向图。文本文件包含以下代码:

0

A
Relation
B
A
Relation
C
B
Relation
C
1

0

A
Relation
C

B
Relation
C
1

这里A,B和C是节点。我可能需要一个或多个图表。 0和1表示每个图的开始和结束。关系的数量也可能不同。我试着继续使用sed,但迷路了。我该如何继续获取我需要的图表?谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

我自己不使用PyGraphViz,但在Python中进行文本处理很容易。给出问题中的输入文件(我称之为gra1.txt)和Python文件gr.py,如下所示:

import sys, subprocess

count = 0
for line in sys.stdin:
    if line[0] == '0':
        outf = "g%d" % (count)
        g = "graph G%d {\n" % (count)
        count += 1
    elif line[0] == '1':
        g += "}\n"
        dot = subprocess.Popen(["dot", "-Tjpg", "-o%s.jpg" % outf], 
                stdin=subprocess.PIPE,universal_newlines=True)
        print (g)
        dot.communicate(g)  
    elif len(line.rstrip()) == 0:
        pass
    else:
        first = line.rstrip()
        rel = sys.stdin.readline()
        last = sys.stdin.readline().rstrip()
        g += "%s -- %s\n" % (first,last)

...命令python gra1.py <gra1.txt产生输出:

$ python gra1.py <gra1.txt
graph G0 {
A -- B
A -- C
B -- C
}

graph G1 {
A -- C
B -- C
}

...以及文件g0.jpg

enter image description here

...和g1.jpg

enter image description here

答案 1 :(得分:0)

你可以使用graphviz python库来完成它。要安装它,您只需要启动:

pip install graphviz

然后在Python中你可以做到:

from graphviz import Source

text_from_file = str()
with open('graphviz_dot_file.txt') as file:
    text_from_file = file.read()

src = Source(text_from_file)
src.render(test.gv', view=True ) 

您可以在Graphviz's manual

中找到更多信息