Как автоматически преобразовать текстовый файл в точечный файл graphviz?

Я пытаюсь автоматически преобразовать свой текстовый файл в неориентированный граф с помощью 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, но заблудился. Как мне поступить, чтобы получить требуемый график? Спасибо за вашу помощь.


person abhisekG    schedule 12.01.2014    source источник
comment
Не могли бы вы привести пример того, как, по вашему мнению, должны выглядеть полученные графики? Правильно ли я думаю, что второй будет выглядеть примерно как A -- C -- B, а первый будет треугольником с A, B и C в трех углах.   -  person Simon    schedule 13.01.2014
comment
Да, точно. Первый будет содержать A, B и C в трех углах. Второй будет содержать A--C--B, т. е. C связан с B и с обоими.   -  person abhisekG    schedule 13.01.2014


Ответы (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:

введите здесь описание изображения

... и g1.jpg:

введите здесь описание изображения

person Simon    schedule 13.01.2014

Вы можете сделать это с помощью библиотеки Python graphviz. Для его установки нужно просто запустить:

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.

person RousseauAlexandre    schedule 29.06.2016
comment
Я получил ошибку при попытке вашего решения, PUN-U531305L001:Desktop 531305$ python graph.py Traceback (последний последний вызов): файл graph.py, строка 8, в ‹module› src.render('test.gv', view=True) Файл /Library/Python/2.7/site-packages/graphviz/files.py, строка 226, в рендеринге «находятся в вашей системе» путь «% cmd) RuntimeError: не удалось выполнить ['точка', ' -Tpdf', '-O', 'test.gv'], убедитесь, что исполняемые файлы Graphviz находятся на пути вашей системы - person Bhupesh Pant; 25.07.2016
comment
У меня была аналогичная проблема. Похоже, вы используете Graphviz на Widows. Убедитесь, что у вас есть Graphviz в ваших системных переменных пути. Здесь ваше решение - person RousseauAlexandre; 25.07.2016