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

Python 如何在文本中的特定行后添加单词?,python,Python,我试图在文件中的某一行后添加一个单词。我正在使用内嵌和引用,并试图创建outfile。填充和引用的类型相同,但引用在特定位置包含TER单词。我想将terword添加到outfile中(基本上创建一个infle副本,并从引用中添加terword)。 我试图按一个数字(代码中的resnum)进行搜索,但会出现问题,因为许多连续行都有相同的数字。 有人能帮忙吗 from sys import argv import argparse script,infile,outfile, reference

我试图在文件中的某一行后添加一个单词。我正在使用内嵌和引用,并试图创建outfile。填充和引用的类型相同,但引用在特定位置包含TER单词。我想将terword添加到outfile中(基本上创建一个infle副本,并从引用中添加terword)。 我试图按一个数字(代码中的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)
文件示例(这是参考,填充相同,但缺少填充)。它们都很好地排列在一起(此处的格式):
原子992 SG CYX D 452 23.296 45.745 28.572 1.00 0.00
原子993 C CYX D 452 20.742 42.431 27.841 1.00 0.00
原子994 O CYX D 452 20.689 41.447 28.565 1.00 0.00
原子995-OXT-CYX D 452 19.788 42.822 27.185 1.00 0.00
TER 995 CYS D 452
996 N ARG D 492 27.510 26.357 34.041 1.00 0.00原子
原子997 H1 ARG D 492 26.590 26.591 33.694 1.00 0.00
原子998 H2 ARG D 492 28.138 27.135 34.182 1.00 0.00
原子999 H3 ARG D 492 27.422 26.030 34.993 1.00 0.00
原子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)

基本逻辑有两个方面:

  • 确定何时需要TER行并生成它。(你已经做到了。)
  • 检测何时将该行写入输出
  • 对于第二部分,您真正需要做的就是认识到resnum452(或任何数字)有一个挂起的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参考。对于整体问题,你真的需要坐下来和你旁边的人一起,在程序流程中获得一些指导帮助;这超出了堆栈溢出的范围。为你重写这篇文章也是一个非常复杂的问题,我建议你在找到某个人之前使用一种策略:尝试增量编程。只需编写几行代码,并确保它们在继续下一步之前工作正常。例如。首先打开infile并将其写入outfile,一次一行。然后添加解释输入行的代码(将其拆分为所需的字段)。第三,打开参考文件并读取它,使其与infle保持同步。下一步,在infle中识别三行并找到匹配的行——找到一行就打印一条消息。看到了吗,一点一点的?谢谢,我会试试的。对不起,我已经有一段时间了,我的脑子都快炸了。我应该把这个放在哪里?我只是刚刚开始编写代码,所以我没有真正理解你所说的;我在TER处理过程中得到了这个。正如新版本所显示的,这是在你将输入行拆分为内容之后进行的。谢谢,但对我来说还是有点太难了。它只是让人困惑:(ternum来自哪里?ternum是与TER行关联的resnum,正如您添加的。现在将TER行保存在一个变量中,然后插入我答案中的代码。