text: user4738: 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()
  
  
  user4747: 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()
  
  
original_text: 4738: <p>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.</p>
  
  <p>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.</p>
  
  <pre class="lang-py prettyprint-override"><code>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()
  </code></pre>
   4747: <p>The problem in your code is that the function atp_binding is not returning any value, but printing it to the stdout.</p>
  
  <p>You should add a return statement with the result you want to save in your output file.</p>
  
  <p>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.</p>
  
  <p>I would use something similar to this:</p>
  
  <pre><code>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()
  </code></pre>
  