【问题标题】:Adding something after particular line Python在特定行 Python 之后添加一些东西
【发布时间】:2017-03-24 21:52:45
【问题描述】:

我试图在输出文件中的特定残基编号之后的一行之后写“TER”(与参考文件中的残基编号匹配)。该代码没有给我任何错误,但只从 infile 复制并且没有添加单词。当尝试在一些代码之后打印时,我认为当我尝试在 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  

【问题讨论】:

  • 向我们展示输入文件内容(或简化版本)、参考文件和所需输出(与上述代码产生的不同)。另一方面,我看到您在迭代输出文件时正在写入它。我认为这可能会混淆文件指针。
  • 我搞定了,谢谢
  • 不幸的是,我无法弄清楚 4 行中的哪一行属于哪个文件 :(
  • 对不起,它们看起来都一样,只是参考文件只包含 TER 记录。其他两个没有。
  • @Loki 我的回答对你有帮助吗?如果您提供更多信息,我可能会提供进一步的帮助。

标签: python


【解决方案1】:

几点/猜测:

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

  • 您似乎检查了 "ATOM "(注意 2 个空格)。从您的文件看来,它应该只有 1 个空格。

为了摆脱空格的问题,我建议你使用split

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

因此,对于您的情况,请使用 as:

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


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-01
    • 1970-01-01
    • 2018-02-21
    • 2013-10-20
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多