我有一个文件,其中有两个名称“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(因为值以纳米为单位,我想转换为埃)并以埃为单位得到输出。
那么,我该如何解决这个问题呢? 任何建议都表示赞赏。
答案 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)