我使用NetworkX通过从大型.pdb文件中剥离线来创建原子和键(通过节点和边)的图形。我如何做的一个例子就是这样:
G.add_node(atom_serial,x=atom_x,y=atom_y,z=atom_z,species=atom_species, color='green')
原子序列,物种,位置和偏移定义为:
atom_serial = int(line[6:12])
atom_species = str(line[(12+offset):(16+offset)]).replace(' ','')
atom_x = float(line[(30+offset):(38+offset)])
atom_y = float(line[(38+offset):(46+offset)])
atom_z = float(line[(46+offset):(54+offset)])
offset = atom_serial/100000
由于pdb格式的限制,使用了偏移量。要将图形写入.xyz文件(常见的水晶查看软件使用的格式),我使用此代码:
def writeGraphToXYZ(myGraph,myFilename):
f = open(myFilename,'w')
f.write(str(len(G))+'\n')
f.write('Atoms. File created from networkx graph by IsingModel.py\n')
for nodeindex in G:
atom = G.node[nodeindex]
f.write(str(atom['species'])+' '+str(atom['x'])+' '+str(atom['y'])+' '+str(atom['z'])+'\n')
f.close()
print("Graph exported.")
我将此程序称为:
writeGraphToXYZ(G,'Randomised_x050-InGaN-50-50-8xyz.xyz')
并收到错误消息:
f.write(str(atom['species'])+' '+str(atom['x'])+' '+str(atom['y'])+' '+str(atom['z'])+'\n')
KeyError: 'species'
"令人费解的"有点是程序在我的同事计算机上运行得非常精细......
有人可以告诉我为什么我会收到此错误而我的同事却没有,尽管事实上我们运行完全相同的代码行,并且可能提供解决方案。
如果您想了解更多信息,请不要犹豫!
答案 0 :(得分:0)
您可以尝试将循环编写为
for node,data in G.nodes(data=True):
print node,data
或者,如果您只是寻找'物种'键
for node,data in G.nodes(data=True):
print node,data['species']
可能是您添加了一个没有“物种”数据的节点。