2011-02-28 54 views
8

我正在嘗試處理並呈現DOT格式的某個圖。 圓點文件我已經是大(300MB〜),它包含多個有向圖在一個點文件中解析多個有向圖

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

我有2個問題:
1.是否有可能使用整個圖形渲染的只有1個有向圖呢?
dot -3 -Tps mygraph.dot -o out.ps只呈現圖3?

2.什麼是最好的Python庫來處理點格式?(其他語言也可)
這裏有兩個我試過了,但還不夠好
pydot它給了我一個有向圖列表導入後,這是好的,但它不處理「。」在節點名稱中。例如nd.nd [label="nd_node"]將失敗

pygraphviz它不處理「」,而只是向圖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 
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])