需求:
如何將train.txt中的表示的圖,讀取到networkx的物件中?
#train.txt (下面有對資料集的解釋)
t # 11808
v 1 C
v 2 C
v 3 O
v 4 O
v 5 C
v 6 S
v 7 S
v 8 O
v 9 O
v 10 C
e 1 2 1
e 1 4 1
e 1 5 1
e 2 3 1
e 2 10 1
e 5 6 1
e 6 7 1
e 7 8 2
e 7 9 2
e 7 10 1
t # 15905
v 1 C
v 2 C
v 3 C
v 4 C
v 5 C
v 6 C
v 7 S
v 8 C
v 9 C
v 10 C
v 11 C
v 12 C
v 13 N
v 14 O
v 15 O
e 1 2 1
e 2 3 2
e 3 4 1
e 4 5 2
e 1 6 2
e 4 7 1
e 7 8 1
e 8 9 1
e 9 10 2
e 10 11 1
e 11 12 2
e 8 13 2
e 7 14 2
e 7 15 2
e 5 6 1
e 12 13 1
t # 17157
v 1 C
v 2 C
v 3 O
v 4 C
v 5 C
v 6 F
v 7 C
v 8 O
v 9 N
v 10 C
v 11 N
v 12 C
v 13 C
v 14 C
v 15 O
v 16 N
v 17 F
e 1 2 1
e 2 3 1
e 3 4 1
e 1 5 1
e 5 6 1
e 2 7 1
e 7 8 1
e 4 9 1
e 9 10 1
e 10 11 1
e 11 12 1
e 12 13 1
e 9 14 1
e 10 15 2
e 12 16 2
e 13 17 1
e 4 5 1
e 13 14 2
t # 35016
v 1 C
v 2 C
v 3 C
v 4 C
v 5 C
v 6 C
v 7 C
v 8 O
v 9 C
v 10 N
v 11 C
v 12 C
v 13 O
v 14 O
v 15 C
v 16 C
v 17 C
v 18 S
e 1 2 1
e 1 6 2
e 2 3 2
e 3 4 1
e 4 5 2
e 5 7 1
e 5 6 1
e 6 18 1
e 7 8 2
e 7 10 1
e 9 11 1
e 9 12 1
e 9 10 1
e 11 15 1
e 11 17 1
e 12 13 2
e 12 14 1
e 15 16 1
文本檔案中的t # 118008表示圖的id,v 1 C 表示這個頂點的id是1,label是c,e 1 2 1表示邊從id為0的頂點指向id為2的頂點,label是1.
如果需要將第一個圖118008讀入到networx物件,需要手動寫如下的代碼,
#將train.txt檔案中的t # 11808代表的圖資訊讀入到networkx物件
g = nx.Graph(id = '11808')
nodes = [('1',{'label':'C'}),
('2',{'label':'C'}),
('3',{'label':'O'}),
('4',{'label':'O'}),
('5',{'label':'C'}),
('6',{'label':'S'}),
('7',{'label':'S'}),
('8',{'label':'O'}),
('9',{'label':'O'}),
('10',{'label':'C'})]
g.add_nodes_from(nodes)
edges = [('1','2',{'label':'1'}),
('1','4',{'label':'1'}),
('1','5',{'label':'1'}),
('2','3',{'label':'1'}),
('2','10',{'label':'1'}),
('5','6',{'label':'1'}),
('6','7',{'label':'1'}),
('7','8',{'label':'2'}),
('7','9',{'label':'2'}),
('7','10',{'label':'1'})]
g.add_edges_from(edges)
問題:
train.txt中大約有2000個圖,因為要用到networkx物件,所以需要遍歷txt中的每一個圖。現在目前沒有思路,希望和經常接觸networkx的你一起討論下。
uj5u.com熱心網友回復:
import networkx as nx
import matplotlib.pyplot as plt
import re
def ReadTxt(filename):
with open(filename) as f:
con = f.read()
con = con + '\nt'
l = re.findall('t # (\d+?)\n(.*?)(?=\nt)', con, re.DOTALL)
ll = {int(_[0]): [i.strip().split(' ') for i in _[1].split("\n")] for _ in l}
return ll
lt = ReadTxt(r"c:\train.txt")
NODES,EDGES,GRAPH = [], [], []
for code,graph in lt.items():
NODES = [(i[1], {'label': i[2]}) for i in graph if i[0] == 'v']
EDGES = [(i[1],i[2], {'label': i[3]}) for i in graph if i[0] == 'e']
G = nx.Graph(id=code)
G.add_nodes_from(NODES)
G.add_edges_from(EDGES)
GRAPH.append(G)
nx.draw(GRAPH[3], with_labels=True)
plt.show()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/21465.html
上一篇:Redeclared 'a' defined above without usage
下一篇:構建簡歷決議工具
