Это не сработает. Вам лучше использовать некоторые регулярные выражения.
from Bio import SeqIO
import re
print('enter the path to your fasta file: ' )
user_input = raw_input()
Po = '[RHKDESTNQ]'
Hy = '[AVILMFWY]'
X = '.'
motif_pattern = Po + X + 'G' + X + X + Hy + X + Hy
motif_regex = re.compile(motif_pattern)
for seq_record in SeqIO.parse(user_input, "fasta"):
aminoacids_count = len(seq_record)
seq_record_trimmed = seq_record[aminoacids_count//2:aminoacids_count + 1]
seq_str = str(seq_record_trimmed.seq)
if motif_regex.search(seq_str):
print(seq_record_trimmed.id)
str(seq_record_trimmed.seq)
преобразует последовательность в обычную строку. Раньше это был объект Seq с не всеми функциями для строки, например поиск по регулярному выражению.
regex - это совершенно новая тема, независимая от Python: ее можно найти в большинстве языков программирования. Вы можете найти объяснения для этого в Интернете. Вы можете поиграть с regex на regex101.com .
Далее: 'R' or 'H' in seq_record
не будет работать должным образом. Он всегда будет возвращать True независимо от того, какой seq_record может быть. Вам нужно 'R' in seq_record or 'H' in seq_record
, или, если вы не хотите повторять seq_record: any(p in seq_record for p in 'RH')
.
Последнее: вы управляете потоком (если / иначе / разбить / продолжить) выглядит ужасно и не делаете то, что вы намеревались с ним. Вы должны прочитать больше о том, как написать это правильно.
Удачи.