[英]How to print something if a particular string is not present in a text file in Python?
[英]How to print something after a particular string when comparing two lists?
我正在尝试比较列表中的字符串,如果该字符串也在另一个列表中,我想在新行上打印一些内容。 不幸的是,两个列表中都有多个相同的变量(数量可能有所不同),我想在最后一个变量的下面打印TER。 我要去哪里错了?
import sys
import argparse
def main(argv):
parser = argparse.ArgumentParser(description='Add Ter 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_1 = []
with open(args.infile, "r") as f, open(args.outfile, "w+") as of, open(args.reference,"r") as rf:
for line in f:
of.write(line)
for line in rf:
if line[0:3]== "TER":
resnum = line[22:27]
resnum_1.append(resnum)
resnum_2 = []
for i in resnum_1:
resnum_2.append(i.strip())
of.seek(0)
for line in of:
if line [0:4]== "ATOM":
res = line[22:27]
res_1.append(res)
res_2 = []
for i in res_1:
res_2.append(i.strip())
for x in res_2:
if x in resnum_2 and (res_2.index(x))+1 != x:
of.write("\nTER\n")
else:
continue
if __name__ == "__main__":
main(sys.argv)
infile
示例:
ATOM 1 N GLU D 384 51.765 39.857 23.514 1.00 0.00 N
ATOM 2 H1 GLU D 384 50.823 39.839 23.150 1.00 0.00 H
ATOM 3 H2 GLU D 384 51.956 39.044 24.081 1.00 0.00 H
ATOM 4 H3 GLU D 384 52.469 39.840 22.790 1.00 0.00 H
ATOM 5 CA GLU D 384 51.934 41.135 24.345 1.00 0.00 C
ATOM 6 HA GLU D 384 53.002 41.062 24.550 1.00 0.00 H
ATOM 7 CB GLU D 384 51.712 42.439 23.503 1.00 0.00 C
ATOM 8 HB2 GLU D 384 52.307 42.297 22.600 1.00 0.00 H
ATOM 9 HB3 GLU D 384 50.640 42.356 23.323 1.00 0.00 H
ATOM 10 CG GLU D 384 52.024 43.786 24.125 1.00 0.00 C
ATOM 11 HG2 GLU D 384 52.138 44.557 23.363 1.00 0.00 H
ATOM 12 HG3 GLU D 384 51.201 44.086 24.773 1.00 0.00 H
ATOM 13 CD GLU D 384 53.381 43.828 24.935 1.00 0.00 C
ATOM 14 OE1 GLU D 384 53.634 43.069 25.869 1.00 0.00 O
reference
示例:
ATOM 1 N GLU D 384 51.765 39.857 23.514 1.00 0.00 N
ATOM 2 H1 GLU D 384 50.823 39.839 23.150 1.00 0.00 H
ATOM 3 H2 GLU D 384 51.956 39.044 24.081 1.00 0.00 H
ATOM 4 H3 GLU D 384 52.469 39.840 22.790 1.00 0.00 H
ATOM 5 CA GLU D 384 51.934 41.135 24.345 1.00 0.00 C
ATOM 6 HA GLU D 384 53.002 41.062 24.550 1.00 0.00 H
ATOM 7 CB GLU D 384 51.712 42.439 23.503 1.00 0.00 C
ATOM 8 HB2 GLU D 384 52.307 42.297 22.600 1.00 0.00 H
ATOM 9 HB3 GLU D 384 50.640 42.356 23.323 1.00 0.00 H
ATOM 10 CG GLU D 384 52.024 43.786 24.125 1.00 0.00 C
ATOM 11 HG2 GLU D 384 52.138 44.557 23.363 1.00 0.00 H
TER
ATOM 12 HG3 GLU D 384 51.201 44.086 24.773 1.00 0.00 H
ATOM 13 CD GLU D 384 53.381 43.828 24.935 1.00 0.00 C
如果我正确理解了您的问题,则以下代码段应该会对您有所帮助。
a = [1, 2, 3, 4, 7]
b = [1, 2, 5, 7, 16]
streak = False
for e in a:
if e in b:
streak = True
elif streak:
streak = False
of.write("TER\n")
of.write(e)
if e in b:
of.write("TER\n")
1
2
TER
3
4
7
TER
假定列表a的元素可以在列表b中的任何位置。 还要注意,它不会标记序列的开始,而只是标记它们的结束。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.