2017-03-24 49 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": 
     ...