0

如何从蛋白质序列的 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 

等等。

在每个循环中,它将序列减少一个。

4

2 回答 2

1

创建一个生成器函数,生成给定字符串的越来越小的切片

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

将两者结合在列表推导中以生成您的片段库。

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

枚举每个片段。用于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
于 2013-09-27T12:45:15.183 回答
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
于 2013-09-27T13:14:44.160 回答