fasta数据中可变氨基酸基序的搜索

2024-06-02 05:32:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要找出我的数据集中哪个蛋白质是这个氨基酸基序:poxgxxhyxy。我使用的是biopython和Python2.7,但我并不是生物信息学家,我被绊倒了。我如何制作像seq\u record+1之类的东西?我试过在射程内使用,但在射程内不起作用SeqIO.parse命令. 嗯,我现在一团糟,有人能帮忙吗?我会非常感激的。你知道吗

from Bio import SeqIO

print('enter the path to your fasta file: ' )
user_input = raw_input()

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]

    if 'R' or 'H' or 'K' or 'D' or 'E' or 'S' or 'T' or 'N' or 'Q' in seq_record_trimmed:
        if 'R' or 'H' or 'K' or 'D' or 'E' or 'S' or 'T' or 'N' or 'Q' or 'C' or 'U' or 'G' or 'P' or 'A' or 'V' or 'I' or 'L' or 'M' or 'F' or 'Y' or 'W' in seq_record_trimmed:
           if 'G' in seq_record_trimmed:
              if 'R' or 'H' or 'K' or 'D' or 'E' or 'S' or 'T' or 'N' or 'Q' or 'C' or 'U' or 'G' or 'P' or 'A' or 'V' or 'I' or 'L' or 'M' or 'F' or 'Y' or 'W' in seq_record_trimmed:
                if 'R' or 'H' or 'K' or 'D' or 'E' or 'S' or 'T' or 'N' or 'Q' or 'C' or 'U' or 'G' or 'P' or 'A' or 'V' or 'I' or 'L' or 'M' or 'F' or 'Y' or 'W' in seq_record_trimmed:
                    if 'A' or 'V' or 'I' or 'L' or 'M' or 'F' or 'W' or 'Y' in seq_record_trimmed:
                        if 'R' or 'H' or 'K' or 'D' or 'E' or 'S' or 'T' or 'N' or 'Q' or 'C' or 'U' or 'G' or 'P' or 'A' or 'V' or 'I' or 'L' or 'M' or 'F' or 'Y' or 'W' in seq_record_trimmed:
                            if 'A' or 'V' or 'I' or 'L' or 'M' or 'F' or 'W' or 'Y' in seq_record_trimmed:
                                print(seq_record.id)
                                continue
                            else:
                                break
                        else:
                            break
                    else:
                        break                                      
                else:
                    break                                  
            else:
                break                     
        else:
            break
    else:
        break
else:
    print(seq_record.id + 'No B_signal has been found')

Tags: orininputifparsecountrecordelse
1条回答
网友
1楼 · 发布于 2024-06-02 05:32:49

那是行不通的。你最好使用一些正则表达式。你知道吗

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搜索那样具有字符串的所有功能。你知道吗

regex本身是一个全新的主题,独立于Python:它可以在大多数编程语言中找到。你可以在网上找到解释。你可以在regex101.com上玩regex。你知道吗

下一步:'R' or 'H' in seq_record将无法按预期工作。不管序列记录是什么,它总是返回True。你想要的是'R' in seq_record or 'H' in seq_record,或者,如果你不想重复序列记录:any(p in seq_record for p in 'RH')。你知道吗

最后:您控制流(if/else/break/continue)看起来很糟糕,并且没有按您的意愿处理它。你应该多读一些关于如何正确书写的文章。你知道吗

祝你好运。你知道吗

相关问题 更多 >