如何从蛋白质序列文件中生成片段库?

时间:2013-09-27 12:19:50

标签: python fasta

如何从蛋白质序列的fasta文件中生成片段?例如,我想以这种方式生成5mer片段:

初始序列:

         >gi|48255
          MSSPPPARSGFYRQEVTKTAWEVRAVYRDLQ

片段:

          1
          MSSPP PARSG FYRQE VTKTA WEVRA VYRDL Q
           2
           SSPPP ARSGF YRQEV TKTAW EVRAV YRDLQ
            3
            SPPPA RSGFY RQEVT KTAWE VRAVY RDLQ
             4
             PPPAR SGFYR QEVTK TAWEV RAVYR DLQ
              5
              PPARS GFYRQ EVTKT AWEVR AVYRD LQ 

等等。

在每个周期中,它会将序列减少一个。

2 个答案:

答案 0 :(得分:1)

创建generator function,使得给定字符串的slices越来越小。

def shrink(s):
    for i in range(len(s)):
        yield s[i:]

创建一个将字符串拆分为五个字符段列表的函数。

def split_into_five_character_segments(s):
    ret = []
    while len(s) > 5:
        ret.append(s[:5])
        s = s[5:]
    ret.append(s)
    return ret

将两者合并在list comprehension中以生成片段库。

sequence = "MSSPPPARSGFYRQEVTKTAWEVRAVYRDLQ"
fragments = [split_into_five_character_segments(s) for s in shrink(sequence)]

Enumerate通过每个片段。使用join将片段的各个部分组合成一个以空格分隔的字符串。

for idx, fragment in enumerate(fragments):
    fragment_number = idx + 1
    indent = " " * idx
    print indent + str(fragment_number)
    print indent + " ".join(fragment)

结果:

1
MSSPP PARSG FYRQE VTKTA WEVRA VYRDL Q
 2
 SSPPP ARSGF YRQEV TKTAW EVRAV YRDLQ
  3
  SPPPA RSGFY RQEVT KTAWE VRAVY RDLQ
   4
   PPPAR SGFYR QEVTK TAWEV RAVYR DLQ
    5
    PPARS GFYRQ EVTKT AWEVR AVYRD LQ
     6
     PARSG FYRQE VTKTA WEVRA VYRDL Q
      7
      ARSGF YRQEV TKTAW EVRAV YRDLQ
       8
       RSGFY RQEVT KTAWE VRAVY RDLQ
        9
        SGFYR QEVTK TAWEV RAVYR DLQ
         10
         GFYRQ EVTKT AWEVR AVYRD LQ
          11
          FYRQE VTKTA WEVRA VYRDL Q
           12
           YRQEV TKTAW EVRAV YRDLQ
            13
            RQEVT KTAWE VRAVY RDLQ
             14
             QEVTK TAWEV RAVYR DLQ
              15
              EVTKT AWEVR AVYRD LQ
               16
               VTKTA WEVRA VYRDL Q
                17
                TKTAW EVRAV YRDLQ
                 18
                 KTAWE VRAVY RDLQ
                  19
                  TAWEV RAVYR DLQ
                   20
                   AWEVR AVYRD LQ
                    21
                    WEVRA VYRDL Q
                     22
                     EVRAV YRDLQ
                      23
                      VRAVY RDLQ
                       24
                       RAVYR DLQ
                        25
                        AVYRD LQ
                         26
                         VYRDL Q
                          27
                          YRDLQ
                           28
                           RDLQ
                            29
                            DLQ
                             30
                             LQ
                              31
                              Q

答案 1 :(得分:0)

我猜你可以用更简单的方法来做到这一点:

fasta_string = 'MSSPPPARSGFYRQEVTKTAWEVRAVYRDLQ'
string_list =  list(fasta_string)
temp1 = []
temp2 = []
for i in range(len(fasta_string)):
    temp1.append(' '*i)
    temp2.append(''.join(string_list[i:len(string_list)]))
    print temp1[i] + str(i+1)
    print temp1[i] + ' ' + temp2[i]

1
 MSSPPPARSGFYRQEVTKTAWEVRAVYRDLQ
 2
  SSPPPARSGFYRQEVTKTAWEVRAVYRDLQ
  3
   SPPPARSGFYRQEVTKTAWEVRAVYRDLQ
   4
    PPPARSGFYRQEVTKTAWEVRAVYRDLQ
    5
     PPARSGFYRQEVTKTAWEVRAVYRDLQ
     6
      PARSGFYRQEVTKTAWEVRAVYRDLQ
      7
       ARSGFYRQEVTKTAWEVRAVYRDLQ
       8
        RSGFYRQEVTKTAWEVRAVYRDLQ
        9
         SGFYRQEVTKTAWEVRAVYRDLQ
         10
          GFYRQEVTKTAWEVRAVYRDLQ
          11
           FYRQEVTKTAWEVRAVYRDLQ
           12
            YRQEVTKTAWEVRAVYRDLQ
            13
             RQEVTKTAWEVRAVYRDLQ
             14
              QEVTKTAWEVRAVYRDLQ
              15
               EVTKTAWEVRAVYRDLQ
               16
                VTKTAWEVRAVYRDLQ
                17
                 TKTAWEVRAVYRDLQ
                 18
                  KTAWEVRAVYRDLQ
                  19
                   TAWEVRAVYRDLQ
                   20
                    AWEVRAVYRDLQ
                    21
                     WEVRAVYRDLQ
                     22
                      EVRAVYRDLQ
                      23
                       VRAVYRDLQ
                       24
                        RAVYRDLQ
                        25
                         AVYRDLQ
                         26
                          VYRDLQ
                          27
                           YRDLQ
                           28
                            RDLQ
                            29
                             DLQ
                             30
                              LQ
                              31
                               Q