在特定行之后添加内容

2024-09-26 18:04:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在outfile中的一行之后,在特定的剩余数之后写入“TER”(与引用文件中的剩余数匹配)。代码没有给我任何错误,但只有从填充副本,没有添加这个词。当我试图打印一些代码位后,我认为它打破了当我试图在outfile搜索。你知道吗

所以这是一部分。另一个问题是如何确保单词“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  

Tags: ofinaddparserifmainlineargs
1条回答
网友
1楼 · 发布于 2024-09-26 18:04:12

几个要点/猜测:

  • of作为w+打开,然后执行for line in of:。你是说f?(我建议使用更具描述性的名称)

  • 您似乎在检查"ATOM "(注意2空格)。从你的文件看来,它应该只有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":
        ...

相关问题 更多 >

    热门问题