当前位置:首页 > 操作系统 > MacOs

需要帮助以Python读取gromac文件

我有一个gromac文件,可从中提取特定细节.文件格式如下.只有我需要每一列中的值.

<code>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
</code>

我已经尝试按照以下代码阅读.

<code>F = open('Data.gro', 'r')
for line in F:
      P = line.split('t')
</code>

我想提取数据如下以浮动变量.

我的想法是拆分数据后称为P [3],P [4],P [6]
但是我失败了.
当我读取文件时,我想在3000行之后跳过信息.每隔3000行就有三行给出信息.我也想跳过前两行. .gro文件具有特定格式.

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

输出应如下.我将使用这些值进行一些计算.

第一组

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

第二组

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

请完整阅读我的问题解答.我需要一些指导来编写上述程序.我是python的新手.我已经进行了研究,但找不到任何帮助来提取这些数字.

谢谢

解决方法:

最终,我能够编写完整的程序来读取我的gromac文件.如果要从grmomac文件读取数据并从中提取特定值,这可能会对某些人有所帮助.将此代码调整为在找到特定位置后读取10行.我用它来读取3000行.这正在100%成功地工作.

<code>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("%sn" % (XO))
                    A.write("%sn" % (YO))
                    A.write("%snn" % (ZO))
                    A.write('Hydrogen 1 atoms XYZ coordinates:' + 'n')
                    A.write("%sn" % (XHW1))
                    A.write("%sn" % (YHW1))
                    A.write("%snn" % (ZHW1))
                    A.write('Hydrogen 2 atoms XYZ coordinates:' + 'n')
                    A.write("%sn" % (XHW2))
                    A.write("%sn" % (YHW2))
                    A.write("%snn" % (ZHW2))
                    XO = []
                    YO = []
                    ZO = []
                    XHW1 = []
                    YHW1 = []
                    ZHW1 = []
                    XHW2 = []
                    YHW2 = []
                    ZHW2 = []
                    R +=1
                else:
                    pass
        else:
            pass

A.close()
</code>

谢谢一些人帮助我解决具体问题. Thanx也去他们那里.这是一个非常不错的网站.我喜欢这个.这对学习东西很有帮助.


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐