Coming from R background, I wanted to try nested for-loop in python. I am having trouble looping through each iteration of types
in my code below. My code works for types[0]
, but not for successive iterations. How do I solve this?
import sys
import os
myfasta = sys.argv[1]
fasta = open(myfasta)
types = ['CDS', 'tRNA', 'rRNA']
for type in range(len(types)):
print('My type index is: ' + str(type))
flag = False
for line in fasta:
if line.startswith('>') and types[type] in line:
flag = True
elif line.startswith('>'):
flag = False
if flag:
print(line.strip())
myfasta
>1_CDS
AAAAATTTCTGGGCCCCAAAAATTTCTGGGCCCC
AAAAATTTCTGGGCCCCAAAAATTTCTGGGCCCC
AAAAATTTCTGGGCCCCAAAAATTTCTGGGCCCC
GGGGTTTTTTT
>2_CDS
TTAAAAATTTCTGGGCCCCGGGAAAAAA
>3_CDS
TTTGGGAATTAAACCCT
>4_CDS
TTTGGGAATTAAACCCT
>5_rRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA
>6_tRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA
Expected result:
My type index is: 0
>1_CDS
AAAAATTTCTGGGCCCCAAAAATTTCTGGGCCCC
AAAAATTTCTGGGCCCCAAAAATTTCTGGGCCCC
AAAAATTTCTGGGCCCCAAAAATTTCTGGGCCCC
GGGGTTTTTTT
>2_CDS
TTAAAAATTTCTGGGCCCCGGGAAAAAA
>3_CDS
TTTGGGAATTAAACCCT
>4_CDS
TTTGGGAATTAAACCCT
My type index is: 1
>5_rRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA
My type index is: 2
>6_tRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA
You can't load your file once and iterate over it as often as you want.
open()
returns an iterator, which can only be consumed once.
Adapt your code to iterate over your file multiple times
import sys
import os
myfasta = sys.argv[1]
types = ['CDS', 'tRNA', 'rRNA']
for type in range(len(types)):
print('My type index is: ' + str(type))
flag = False
fasta = open(myfasta)
for line in fasta:
if line.startswith('>') and types[type] in line:
flag = True
elif line.startswith('>'):
flag = False
if flag:
print(line.strip())