在python中获取特定的行及其坐标

时间:2018-02-15 06:07:39

标签: python

我有一个文件,其中有两个名称“CA”,但我只需要与1GLY对应的“CA”和所有“OW”。

以下是我的以下文件:

由trjconv生成:

1GLY      N    1   1.081   1.128   1.298
1GLY     H2    2   1.095   1.126   1.401
1GLY     H3    3   1.020   1.211   1.285
1GLY     CA    4   1.204   1.158   1.219
1GLY      O    5   1.322   1.290   1.382
2GLY      N    6   1.265   1.392   1.193
2GLY     CA    7   1.324   1.520   1.234
2GLY    HA1    8   1.417   1.511   1.288
2GLY    HA2    9   1.334   1.573   1.141  
3SOL     OW   10   1.351   1.298   2.103
3SOL    HW1   11   1.375   1.395   2.102
3SOL    HW2   12   1.274   1.282   2.041
4SOL     OW   13   1.568   0.586   2.355
4SOL    HW1   14   1.643   0.623   2.410
4SOL    HW2   15   1.513   0.661   2.319
5SOL     OW   16   2.107   1.692   1.802
5SOL    HW1   17   2.064   1.627   1.740
5SOL    HW2   18   2.074   1.784   1.781 
and so on..

所以这是我的python代码:

import re

k=0

F=open('abc.dat','r')
A=open('def.dat','w')

with open ('abc.dat') as F:
    for x in F:
        line=x.strip()

        if line.startswith("Generated by"):
            k=k+1

        if re.search('CA|OW', line):
            A.write(str(k) + '\t')

            for i in range(22,44):
                A.write(x[i])

            A.write('\n')

但是我得到了CA和Ow的输出(x,y,z坐标),即

1    1.204   1.158   1.219    
1    1.324   1.520   1.234  
1    1.351   1.298   2.103   
1    1.568   0.586   2.355

1)但我不想要2GLY CA的坐标(即,1。1324 1.520 1.234)。

2)如何在代码中乘以10(因为值以纳米为单位,我想转换为埃)并以埃为单位得到输出。

那么,我该如何解决这个问题呢? 任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:1)

这很简单,我把你的领域视为@api.onchange('session_start') def onchange_session_start(self): for record in self: if self.session_start is not None : self.session_finish = self.session_start + self.duration 。你可以实现以下目的..

dhn.txt

我看到第二个快速而肮脏的方法:

with open('dhn.txt', mode='rt', encoding='utf-8') as f:
    for line in f:
        if line.startswith("1GLY"):
            if "CA" in line:
                print(line)

$ ./dhn.py
1GLY     CA    4   1.204   1.158   1.219

结果如预期:

with open('dhn', mode='rt', encoding='utf-8') as f:
    for line in f:
        if (line.startswith("1GLY")) or ('OW' in line):
            if "CA" in line or "OW" in line:
                print(line)