2014-01-17 38 views
2

我有一個gromac文件來從中提取特定的細節。文件格式如下。只有我需要每列中的值。需要幫助來閱讀Python中的gromac文件

Generated by trjconv : a bunch of waters t= 0.00000 
3000 
    1SOL  OW 1 1.5040 2.7580 0.6820 
    1SOL HW1 2 1.4788 2.7853 0.7702 
    1SOL HW2 3 1.4640 2.8230 0.6243 
    2SOL  OW 4 1.5210 0.9510 2.2050 
    2SOL HW1 5 1.5960 0.9780 2.1520 
    2SOL HW2 6 1.4460 0.9940 2.1640 
1000SOL  OW 2998 1.5310 1.7952 2.1981 
1000SOL HW1 2999 1.4560 1.7375 2.1836 
1000SOL HW2 3000 1.6006 1.7369 2.2286 
    3.12736 3.12736 3.12736 
Generated by trjconv : a bunch of waters t= 9000.00000 
3000 
    1SOL  OW 1 1.1579 0.4255 2.1329 
    1SOL HW1 2 1.0743 0.3793 2.1385 
    1SOL HW2 3 1.1514 0.4772 2.0526 
    2SOL  OW 4 2.2976 2.5403 0.1574 
    2SOL HW1 5 2.2161 2.4981 0.1847 
    2SOL HW2 6 2.3118 2.6092 0.2223 
1000SOL  OW 2998 2.5927 1.0233 0.4695 
1000SOL HW1 2999 2.5927 0.9869 0.3810 
1000SOL HW2 3000 2.5365 0.9642 0.5197 
    3.10941 3.10941 3.10941 

我試過下面的代碼來閱讀它。

F = open('Data.gro', 'r') 
for line in F: 
     P = line.split('\t') 

我想提取數據如下面的浮動變量。

我的想法是在分割稱爲P [3],P [4],P [6] 的數據後,但我失敗了。 當我正在閱讀文件時,我想在3000行之後跳過信息。每3000條線後有三條信息。我也想跳過前兩行。 .gro文件具有特定的格式。

http://manual.gromacs.org/current/online/gro.html

出認沽應該是如下。我將使用這些值進行一些計算。

首套

X = [1.5040, 1.4788, 14640,... , 1.6006] 
Y = [2.7580, 2.7853,   , 1.7369] 
Z = [0.6820, 0.7702,   , 2.2286] 

第二組

X = [1.1579, 1.0743, ,... , 2.5365] 
Y = [0.4255, 0.3793, ,... , 0.9642] 
Z = [2.1329, 2.1329, ,... , 0.5197] 

請仔細閱讀我的問題護理。我需要一些指導來編寫上面的程序。我是新的python。我已經完成了研究,但找不到任何幫助來提取這些數字。

謝謝

回答

2

最後我能寫完整的程序來閱讀我的gromac文件。如果要從grmomac文件中讀取數據並從中提取特定值,這可能會有所幫助。此代碼調整爲在找到特定位置後讀取10行。我用它讀取3000行。這成功地運作了100%。

F = open('Data.gro', 'r') 
A = open('XYZ.txt', 'w') 
XO = [] 
YO = [] 
ZO = [] 
XHW1 = [] 
YHW1 = [] 
ZHW1 = [] 
XHW2 = [] 
YHW2 = [] 
ZHW2 = [] 
I = range(1, 10) 
with open('Data.gro') as F: 
    for line in F: 
     if line.split()[0] == '3000': 
      A.write('Frame' + '\n') 
      for R in I: 
       line = next(F) 
       P = line.split() 
       if P[1] == 'OW': 
        x = float(P[3]) 
        y = float(P[4]) 
        z = float(P[5]) 
        XO.append(x) 
        YO.append(y) 
        ZO.append(z) 
       else: 
        if P[1] == 'HW1': 
         x = float(P[3]) 
         y = float(P[4]) 
         z = float(P[5]) 
         XHW1.append(x) 
         YHW1.append(y) 
         ZHW1.append(z) 
        else: 
         if P[1] == 'HW2': 
          x = float(P[3]) 
          y = float(P[4]) 
          z = float(P[5]) 
          XHW2.append(x) 
          YHW2.append(y) 
          ZHW2.append(z) 
         else: 
          pass 
       if line.split()[2] == '3000': 
        A.write('Oxygen atoms XYZ coordinates:' + '\n') 
        A.write("%s\n" % (XO)) 
        A.write("%s\n" % (YO)) 
        A.write("%s\n\n" % (ZO)) 
        A.write('Hydrogen 1 atoms XYZ coordinates:' + '\n') 
        A.write("%s\n" % (XHW1)) 
        A.write("%s\n" % (YHW1)) 
        A.write("%s\n\n" % (ZHW1)) 
        A.write('Hydrogen 2 atoms XYZ coordinates:' + '\n') 
        A.write("%s\n" % (XHW2)) 
        A.write("%s\n" % (YHW2)) 
        A.write("%s\n\n" % (ZHW2)) 
        XO = [] 
        YO = [] 
        ZO = [] 
        XHW1 = [] 
        YHW1 = [] 
        ZHW1 = [] 
        XHW2 = [] 
        YHW2 = [] 
        ZHW2 = [] 
        R +=1 
       else: 
        pass 
     else: 
      pass 

A.close() 

Thanx有人幫我解決一些具體問題。 Thanx也去了他們。這是一個非常好的網站。我喜歡這個。這有助於學習東西。