Как работать с вложенным циклом, проходящим через элементы массива? - PullRequest
0 голосов
/ 28 марта 2019

Исходя из фона R, я хотел попробовать вложенный цикл for в python.У меня возникают проблемы с циклом прохождения каждой итерации types в моем коде ниже.Мой код работает для types[0], но не для последовательных итераций.Как мне решить эту проблему?

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

Ожидаемый результат:

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

Ответы [ 2 ]

2 голосов
/ 28 марта 2019

Вы не можете загрузить файл один раз и повторять его так часто, как хотите.

open() возвращает итератор, который можно использовать только один раз.

Адаптируйте ваш код для многократного повторения вашего файла

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())
1 голос
/ 28 марта 2019

Попробуйте этот код:

import sys
import os

myfasta = sys.argv[1]
with open(myfasta) as f:
    lines = f.readlines()
types = ['CDS', 'tRNA', 'rRNA']

for type_index, type in enumerate(types):
    print('My type index is:', type_index)
    flag = False
    for line in lines:
        if line.startswith('>') and type in line:
            flag = True
        elif line.startswith('>'):
            flag = False
        if flag:
            print(line.strip())

Выход

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
>6_tRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA
My type index is: 2
>5_rRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...