Function to find ATP binding sites I'm currently doing a python project where I need to write code that extracts the ATP binding site from a FASTA file using a regular expression.

I've tried the following code but it does not work. It opens a new file but the file is empty. I don't know what's wrong.

from Bio import SeqIO
import re
import os
path="C:/Users/nessr/Desktop/info projet"
os.chdir(path)
records=list(SeqIO.parse("plasmo.fasta","fasta"))
ATPM="[LIV]G[^P]G[^P][FYWMGSTNH][SGA][^PW][LIVCAT][^PD].[GSTACLIVMFY].{5,18}[LIVMFYWCSTAR][AIVP][LIVMFAGCKR]K"
patern=re.compile(r"(ATPM)")

def atp_binding(records,patern):

    for item in records:
        for m in patern.findall(str(item)):
            istart=m.start()
            iend=m.end()

            iend=iend+50

            print(istart,m.group())


file = open("output.txt","w")

for seq_record in SeqIO.parse(records, "fasta"): 
    file.write(atp_binding(seq_record.records,patern)+"\n")
    file.write('-------------------\n')
file.close()
The problem in your code is that the function atp_binding is not returning any value, but printing it to the stdout.

You should add a return statement with the result you want to save in your output file.

Also, you should change how the resulting value is being saved. As the return value of your function is None, the file handler will write nothing.

I would use something similar to this:

def atp_binding(records,patern):
    s = ""
    for item in records:
        for m in patern.findall(str(item)):
            istart=m.start()
            iend=m.end()
            iend=iend+50
            s+="{0}\t{1}\n".format(istart,m.group())
    return s



file = open("output.txt","w")

for seq_record in SeqIO.parse(records, "fasta"): 
   file.write(atp_binding(seq_record.records,patern)+"\n")
   file.write('-------------------\n')
file.close()