0
$\begingroup$

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()
$\endgroup$
2
  • $\begingroup$ Welcome to Bioinformatics.SE! We're happy to help with homework and research problems, but you're much more likely to get helpful feedback if you describe precisely what your problem is. Asking "can you please tell me how to do this?" will rarely get you a useful answer. Dumping poorly formatted code is another way to turn potential helpers away. Please take a moment to clean up your Python code (use the Markdown Editing Help guide if needed), and then please be more specific about what is and is not working. $\endgroup$ Jun 18 '19 at 19:23
  • $\begingroup$ I put backticks around your code and cleaned up the question a little bit. I hope this helps. Please continue to edit and clarify your question. $\endgroup$ Jun 18 '19 at 19:27
1
$\begingroup$

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()
$\endgroup$
1
  • $\begingroup$ It is a good practice to handle file with with command. like : with open("output.txt", "w") as file : ..... $\endgroup$
    – Dexter
    Jul 24 '19 at 17:13

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.