2017-03-24 35 views
1

我想在特殊残留数字(与参考文件中的残基数量相匹配)之后的outfile中的一行后写“TER”。该代码不给我任何错误,但只有来自infile的副本,并不添加单词。当试图在一些代码后打印时,我认为当我试图在outfile中搜索时会中断打印。在特定行之后添加一些东西Python

这就是这一部分。另一个是我如何确保单词“TER”仅在最后一个残留数字后面添加(它们之间有不同数量的行,并且我只想在最后一行之后添加它们)。 这是我的代码:

import sys 
import argparse 

def main(argv): 
    parser = argparse.ArgumentParser(description='Read SSBOND directives from a PDB, and generate corresponding CONECT records') 
    parser.add_argument('infile', help='input file (PDB format)') 
    parser.add_argument('outfile', help='output file (PDB format)') 
    parser.add_argument('reference', help =' ref') 
    args = parser.parse_args() 

    resnum_1 =[] 
    res = [] 

    with open(args.infile, "r") as f, open(args.outfile, "w+") as of, open(args.reference,"r") as rf: 
     for line in rf: 
      if line[0:4] == "TER ": 
       resnum = line[22:27] 
       resname = line[17:20] 
       chain = line[21] 
       resnum_1.append(resnum) 

       for line in f: 
        of.write(line) 

      for line in of: 
       if line[0:6] == "ATOM ": 
        resnum_fo = line[22:27] 
        resname_fo = line[17:19] 
        chain_fo = line[21] 
        res.append(resnum_fo) 


        if resnum in resnum_1 and resnum_fo in res: 
         of.write("TER\n") 

if __name__ == "__main__": 
    main(sys.argv) 

非常感谢!

的文件看起来是这样的:

ATOM  0 HB2 CYX D 452  45.962 -2.641 -17.575 1.00 0.00 
ATOM  0 HB3 CYX D 452  46.188 -2.186 -19.050 1.00 0.00 
TER  995  CYX D 452 
ATOM 995 N ARG D 492  42.476 10.547 -39.562 1.00 0.00 
+0

母猪我们输入的文件内容(或简化版本),参考文件和期望输出(与上面的代码不同)的相同内容。另一方面,我看到你正在写输出文件,同时迭代它。我认为这可能会混淆文件指针。 – CristiFati

+0

我已经做了,谢谢 – Loki

+0

不幸的是,我找不出哪个文件属于哪个文件:( – CristiFati

回答

1

几个百分点/猜测:

  • 你打开ofw+,但你做for line in of:。你的意思是f? (我建议一些描述性的名称)

  • 你似乎核对"ATOM "(注意:空格)。从你的文件看来,它应该只有1个空格。

逃脱的空间的问题,我建议你使用split

"one two three".split() 
['one', 'two', 'three'] 

因此,对于你的情况,如使用:

for line in rf: 
    contents = line.split() 
    if contents[0] == "TER": 
     ... 


for line in f: 
    contents = line.split() 
    if contents[0] == "ATOM": 
     ...