893932098 发表于 2014-12-12 18:08

银风冷月 发表于 2014-12-12 18:36

a = for x in open('PYL5.pdb') if x.startswith('ATOM')]
f =
for i in range(1,len(a)):
    if int(a)-int(a) == 1 or int(a)-int(a) == 0:
        pass
    else:
        f = 'TER\n'+f

with open('PYL50.pdb','w') as fw:
    fw.writelines(f)试试这个如何?

奢侈动车 发表于 2014-12-13 11:29

支持楼主,推荐~~

893932098 发表于 2014-12-13 13:24

893932098 发表于 2014-12-13 13:24

ch_hoho 发表于 2014-12-15 19:51

awk实现,尝试新的解决方案。

awk 'NR==1{a=$6;print $0;next}{if(a==$6||++a==$6)print $0;else{ print "TER";print $0;a=$6}}'

kooleon 发表于 2014-12-16 13:01

本帖最后由 kooleon 于 2014-12-16 13:05 编辑

$awk -F "[ ]+"'NR==1 {i=$6;print $0;next} {print ($6==i || $6==i+1)?$0:"TER";i=$6}' file1
ATOM    573O   MET B 110       7.574-8.751-3.7741.00 41.42         O
ATOM    574N   VAL B 111       7.244-7.123-5.3281.00 41.20         N
ATOM    575CAVAL B 111       6.111-6.471-4.7761.00 42.74         C
ATOM    576CBVAL B 111       6.348-4.974-4.6741.00 43.45         C
ATOM    577CG1 VAL B 111       5.257-4.266-3.8681.000.00         C
ATOM    578CG2 VAL B 111       7.740-4.774-4.0491.000.00         C
ATOM    579C   VAL B 111       5.022-6.999-5.6831.00 46.95         C
ATOM    580O   VAL B 111       4.896-8.203-5.5031.00 55.71         O
TER
ATOM    582CAPRO B 116       3.376-7.544-7.1901.00 75.54         C
ATOM    583CDPRO B 116       3.417-5.287-6.4131.00 80.36         C
ATOM    584CBPRO B 116       2.112-6.860-7.7161.00 74.55         C
ATOM    585CGPRO B 116       1.983-5.596-6.8611.00 78.83         C
ATOM    586C   PRO B 116       4.211-8.026-8.3131.00 73.33         C
ATOM    587O   PRO B 116       5.059-8.901-8.1861.00 70.39         O
ATOM    588N   ALA B 117       3.949-7.422-9.4461.00 69.09         N
ATOM    589CAALA B 117       4.764-7.535 -10.6481.00 61.56         C
ATOM    590CBALA B 117       3.884-7.662 -11.8871.00 60.67         C
ATOM    591C   ALA B 117       5.680-6.324 -10.7421.00 65.02         C
ATOM    592O   ALA B 117       5.554-5.488 -11.6481.00 69.82         O
ATOM    593N   VAL B 118       6.576-6.224-9.7651.00 61.78         N


嗯。刚才想了下,思路和楼上一相,还是贴出来吧

893932098 发表于 2014-12-16 14:35

KoomIer 发表于 2014-12-16 22:11

我都觉得我可以写,哈哈
就是缓存上一个值比较呗
[~/python]$ cat PYL5.pdb
ATOM    573O   MET B 110       7.574-8.751-3.7741.00 41.42         O
ATOM    574N   VAL B 111       7.244-7.123-5.3281.00 41.20         N
ATOM    575CAVAL B 111       6.111-6.471-4.7761.00 42.74         C
ATOM    576CBVAL B 111       6.348-4.974-4.6741.00 43.45         C
ATOM    577CG1 VAL B 111       5.257-4.266-3.8681.000.00         C
ATOM    578CG2 VAL B 111       7.740-4.774-4.0491.000.00         C
ATOM    579C   VAL B 111       5.022-6.999-5.6831.00 46.95         C
ATOM    580O   VAL B 111       4.896-8.203-5.5031.00 55.71         O
ATOM    581N   PRO B 116       4.195-6.511-6.5881.00 77.67         N
ATOM    582CAPRO B 116       3.376-7.544-7.1901.00 75.54         C
ATOM    583CDPRO B 116       3.417-5.287-6.4131.00 80.36         C
ATOM    584CBPRO B 116       2.112-6.860-7.7161.00 74.55         C
ATOM    585CGPRO B 116       1.983-5.596-6.8611.00 78.83         C
ATOM    586C   PRO B 116       4.211-8.026-8.3131.00 73.33         C
ATOM    587O   PRO B 116       5.059-8.901-8.1861.00 70.39         O
ATOM    588N   ALA B 117       3.949-7.422-9.4461.00 69.09         N
ATOM    589CAALA B 117       4.764-7.535 -10.6481.00 61.56         C
ATOM    590CBALA B 117       3.884-7.662 -11.8871.00 60.67         C
ATOM    591C   ALA B 117       5.680-6.324 -10.7421.00 65.02         C
ATOM    592O   ALA B 117       5.554-5.488 -11.6481.00 69.82         O
ATOM    593N   VAL B 118       6.576-6.224-9.7651.00 61.78         N
[~/python]$ cat Change.py
#!/usr/bin/python
import re

filein = open('PYL5.pdb','r')
fileout = open('PYL5out.pdb','w+')
initflag=1
for line in filein:
      data=int(line.split())
      if initflag==0:
                if data==lastdata+1 or data==lastdata:
                     fileout.write("%s"%(line))
                else:
                     fileout.write("TER\n")
      elif initflag==1:
                fileout.write("%s"%(line))
                initflag=0
      lastdata=data
filein.close()
fileout.close()

[~/python]$ cat PYL5out.pdb
ATOM    573O   MET B 110       7.574-8.751-3.7741.00 41.42         O
ATOM    574N   VAL B 111       7.244-7.123-5.3281.00 41.20         N
ATOM    575CAVAL B 111       6.111-6.471-4.7761.00 42.74         C
ATOM    576CBVAL B 111       6.348-4.974-4.6741.00 43.45         C
ATOM    577CG1 VAL B 111       5.257-4.266-3.8681.000.00         C
ATOM    578CG2 VAL B 111       7.740-4.774-4.0491.000.00         C
ATOM    579C   VAL B 111       5.022-6.999-5.6831.00 46.95         C
ATOM    580O   VAL B 111       4.896-8.203-5.5031.00 55.71         O
TER
ATOM    582CAPRO B 116       3.376-7.544-7.1901.00 75.54         C
ATOM    583CDPRO B 116       3.417-5.287-6.4131.00 80.36         C
ATOM    584CBPRO B 116       2.112-6.860-7.7161.00 74.55         C
ATOM    585CGPRO B 116       1.983-5.596-6.8611.00 78.83         C
ATOM    586C   PRO B 116       4.211-8.026-8.3131.00 73.33         C
ATOM    587O   PRO B 116       5.059-8.901-8.1861.00 70.39         O
ATOM    588N   ALA B 117       3.949-7.422-9.4461.00 69.09         N
ATOM    589CAALA B 117       4.764-7.535 -10.6481.00 61.56         C
ATOM    590CBALA B 117       3.884-7.662 -11.8871.00 60.67         C
ATOM    591C   ALA B 117       5.680-6.324 -10.7421.00 65.02         C
ATOM    592O   ALA B 117       5.554-5.488 -11.6481.00 69.82         O
ATOM    593N   VAL B 118       6.576-6.224-9.7651.00 61.78         N

回复 3# 893932098


   

893932098 发表于 2014-12-17 09:02

页: 1 [2] 3
查看完整版本: 文本处理问题