разобрать несколько орграфов в одном файле точек - PullRequest
8 голосов
/ 01 марта 2011

Я пытаюсь обработать и визуализировать некоторый график в формате DOT.У меня большой файл точек (~ 300 МБ), и он содержит несколько орграфов

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

У меня есть 2 вопроса:
1. Можно ли использовать рендер только 1 орграф вместо всегоgraph?
Что-то вроде dot -3 -Tps mygraph.dot -o out.ps для рендеринга только в орграфе 3?

2. Какая библиотека Python лучшая для обработки точечного формата? (другие языки также приемлемы)
Вот два, которые я попробовал,но недостаточно хорошо
pydot Это дает мне список орграфов после импорта, что хорошо, но не обрабатывает "."в имени узла.Например, nd.nd [label="nd_node"] потерпит неудачу

pygraphviz Он обрабатывает ".", Но импортирует орграф 1 только при наличии нескольких определений графа в файле: (*

Ответы [ 2 ]

2 голосов
/ 29 ноября 2011

Не уверен, что это то, что вы хотели, но вам просто нужно написать простой парсер, или как вы хотите его называть. 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 голос
/ 29 февраля 2012

Поскольку у вас есть 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
...