2011-02-28 2 views
8

DOT 형식의 그래프를 처리하고 렌더링하려고합니다. 내가 가진 점 파일 (~ 3백메가바이트) 큰, 그리고 내가이 개 질문을 가지고하나의 도트 파일에서 다중 다이 그래프를 구문 분석합니다.

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

여러 이중 음자 포함
1. 전체 그래프 대신에 단지 1 소리를 나타내는 두 글자를 렌더링 사용할 수 있습니까?
digraph 3 만 렌더링하려면 dot -3 -Tps mygraph.dot -o out.ps과 같은 값을 사용 하시겠습니까?

도트 형식을 처리하는 가장 좋은 파이썬 라이브러리의 2.What

? (다른 언어는 허용도 있습니다) 여기
내가 노력이 있지만, pydot
충분하지 그것은 가져 오기 후 나에게 소리를 나타내는 두 글자의 목록을 제공하는 좋지만, 처리하지 못합니다. " 노드 이름에. 예를 들어 nd.nd [label="nd_node"]는 "."그것은 어떻게 처리합니까

pygraphviz 실패하지만,하는 파일 :(여러 그래프 정의를 주어 소리를 나타내는 두 글자 1 만 수입

답변

1

dot이 있으니 그래프 처리 도구 인 gvpr도 있어야합니다. 당신과 같이 간단한 gvpr 스크립트로 세 번째 그래프를 인쇄 할 수 있습니다

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

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

그런 다음, 소스 필터로 사용할 수 있습니다

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]) 
관련 문제