如何在文本中的特定行之后添加单词?

时间:2017-03-27 18:32:54

标签: python

我想在我的文件中的特定行之后添加一个单词。我正在使用infile和一个引用并尝试创建outfile。 infile和reference是相同的类型,但引用包含特定位置的TER字。我想将TER字添加到outfile中(基本上创建infile的副本并从引用中添加TER)。 我试图通过一个数字(代码中的resnum)搜索,但是会有一个问题,因为许多连续的行具有相同的数字。 有人可以帮忙吗?

from sys import argv
import argparse

script,infile,outfile, reference = argv
Ter = []
res = []


def get_Ter(reference):
    reference_1 = open(reference,"r")
    for line in reference_1:
        contents = line.split(" ")
        if contents[0] == "TER":
        resnum = line[22:27]
        resname = line[17:20]
        chain = line[21]
        Ter.append(resnum)

        def find_TER(infile,outfile):
            with open(infile, "r") as infile_1:
                content = infile_1.readlines()
            with open(outfile, "w+") as outfile_1:
                outfile_1.write(content)
                if line[0:6] == "ATOM  ":
                    resnum_1 = line[22:27]
                    res.append(resnum_1)
                    if resnum_1 in res == resnum in Ter:
                        outfile_1.write(line + "\nTER")

        find_TER(infile,outfile)
get_Ter(reference)

文件示例(这是参考,infile是相同但缺少TER)。它们都很好地排列在彼此之下(格式在这里):
ATOM 992 SG CYX D 452 23.296 45.745 28.572 1.00 0.00
ATOM 993 C CYX D 452 20.742 42.431 27.841 1.00 0.00
ATOM 994 O CYX D 452 20.689 41.447 28.565 1.00 0.00
ATOM 995 OXT CYX D 452 19.788 42.822 27.185 1.00 0.00
TER 995 CYS D 452
ATOM 996 N ARG D 492 27.510 26.357 34.041 1.00 0.00
ATOM 997 H1 ARG D 492 26.590 26.591 33.694 1.00 0.00
ATOM 998 H2 ARG D 492 28.138 27.135 34.182 1.00 0.00
ATOM 999 H3 ARG D 492 27.422 26.030 34.993 1.00 0.00
ATOM 1000 CA ARG D 492 28.179 25.410 33.192 1.00 0.00

现在我有了这个:

from sys import argv
import argparse

   script,infile,outfile, reference = argv
   Ter = []
   res = []

def get_Ter(reference):
    reference_1 = open(reference,"r")
    for line in reference_1:
        contents = line.split(" ")
    if contents[0] == "TER":
        ternum = line[22:27]

        def find_TER(infile,outfile):
            with open(infile, "r") as infile_1:
                content = infile_1.readlines()
            with open(outfile, "w+") as outfile_1:
                for line in content:
                    outfile_1.write(line)
                    line = line.split(" ")
                    if line[0] == "ATOM":
                        resnum = line[22:27]
                        if ternum == resnum:




                            find_TER(infile,outfile)
get_Ter(reference)

1 个答案:

答案 0 :(得分:0)

基本逻辑是双重的:

  1. 确定何时需要TER线并生成它。 (你已经完成了这件事。)
  2. 检测何时将该行写入输出。
  3. 你真正需要做的第二部分就是要认识到你有resnum 452的待定TER输出(或者它是什么数字)。你可以用一个简单的变量做到这一点:保持在-1,直到你有一个有效的resnum。

    在阅读时,你会一直检查那个resnum。如果它是正面的并且与最近的输入线不同,则必须在执行任何其他操作之前打印TER线。像这样:

    contents = line.split():
    resnum = line[22:27]
    if ternum > 0 and ternum != int(resnum):
        # write out the TER line
        ternum = -1
    
    # continue with rest of the program.
    if contents[0] == "TER":
        ...
    

    您可能还需要在文件末尾检查,以防最后一个resnum有一条挂起的TER线要打印出来。

    这足以让你感动吗?