我试图在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
几个要点/猜测:
将
of
作为w+
打开,然后执行for line in of:
。你是说f
?(我建议使用更具描述性的名称)您似乎在检查
"ATOM "
(注意2空格)。从你的文件看来,它应该只有1个空间。为了解决空间的问题,我建议您使用
split
:因此,对于您的情况,请使用:
相关问题 更多 >
编程相关推荐