2014-02-14 104 views
-1

我試圖從文件中讀取座標並找到文件中每個兩個相應原子之間的距離。 我想要在一列中計算出距離,在另一列中計算相應的原子名稱。從文件中調用座標的距離計算(Python2.7)

1 Br1 0 Br x,y,z 1.195 7.005 10.004 
2 Br2 0 Br x,y,z 1.432 5.040 6.816 
3 Br3 0 Br x,y,z -0.407 8.433 6.863 
4 Br4 0 Br x,y,z 3.344 8.375 7.107 
5 Fe1 0 Fe x,y,z 1.412 7.214 7.682 
6 Br5 0 Br x,y,z 2.813 12.506 12.949 
7 Br6 0 Br x,y,z 4.778 14.123 10.091 
8 Br7 0 Br x,y,z 6.563 12.765 13.175 
9 Br8 0 Br x,y,z 4.387 15.965 13.344 

例如:

Br1-Br2 1.5 

我遇到兩個問題:

1-I不知道如何以命令程序來計算每個2對原子之間的歐幾里德距離,我用split()從其他數據分割座標,但我仍然不知道如何計算距離。我發現了一些關於same problem的信息,但是這些答案對我來說並不適用,因爲它們是針對perl的。

atom_positions= open('Atoms.txt','r') 
revised_atom_positions = open('Atoms_atoms.txt','w') 
aline = atom_positions.readline()#for getting rid of the first line data which is general info 

for aline in atom_positions: 
    Values = aline.split() 
    dataline = values[1]+' , '+ values[5] + ' , ' + values[6] +' , '+values[7] 
    revised_atom_positions.write(dataline + '\n') 


atom_positions.close() 
revised_atom_positions.close() 

當我試圖把它變成一個數組,並使用pdist我得到的錯誤:

TypeError: 'builtin_function_or_method' object has no attribute '__getitem__' 

2 - 我可以存儲我的新數據與新秩序的其他文件,但我沒有想法如何打電話給他們進行距離計算!有一些關於pdist的指導方針,但它對我也不起作用。

有沒有解決這個問題的方法?

回答

1

您可以使用索引:

atom_positions= open('Atoms.txt','r') 
revised_atom_positions = open('Atoms_atoms.txt','w') 

lines = atom_positions.readlines() 

for i in range(0, len(lines)): 
    line = lines[i] 
    values = line.split() 
    dataline = values[1]+' , '+ values[5] + ' , ' + values[6] +' , '+values[7] 
    # You can access to next line with lines[i + 1] 
    revised_atom_positions.write(dataline + '\n') 


atom_positions.close() 
revised_atom_positions.close()