【问题标题】:Padding short sequences with GAPs using Biopython使用 Biopython 用 GAP 填充短序列
【发布时间】:2020-10-22 16:34:52
【问题描述】:

我希望我的序列具有相同的长度,因此,根据我的 fasta 文件的最长,用 GAP ( - ) 填充较短的序列。简而言之,我认为实现它的最佳方法是找到最长的序列,然后将 GAP 添加到其他序列,但可能有更快的选择。请注意,我不想使用对齐功能,而只是 fill 排序器序列。在我想要运行的脚本下方(由于它不工作而失败)

max_length=0

for sequence in SeqIO.parse(path/to/file, 'fasta'):
         length=len(sequence.seq)
         if length > max_length:
                  max_length= length
         else:
                 pass

for sequence in SeqIO.parse(path/to/file, 'fasta'):
     length=len(sequence.seq)
     if length < max_length:
              sequence.seq=sequence.seq+Seq('-')
              if len(sequence.seq) == max_length:
                          break
              else:
                          continue

SeqIO.write(sequence, path/to/new/file, 'fasta')

谢谢!

【问题讨论】:

    标签: python padding fill


    【解决方案1】:

    Seq 对象有一个有点类似于字符串的 API,(但在这种情况下缺少像 ljust 这样有用的东西)。 这是一个可能的解决方案:

    from Bio import SeqIO
    
    sequences = [s for s in SeqIO.parse('seq.fasta', 'fasta')]
    max_len = max([len(s.seq) for s in sequences])
    GAPs = "-"
    for seq in sequences:
        padding = GAPs*(max_len - len(seq.seq)) # creating the padding string
        seq.seq += padding
    
    SeqIO.write(sequences, 'newseq.fasta', 'fasta')
    

    这个解决方案并没有真正优化,因为在您的尝试中,我们首先寻找最大长度,然后我们填充。为了填充,这个解决方案在字符串上使用了两个有用的运算符:

    • *,将字符串重复一定次数,以获得所需长度的填充。
    • + 连接两个字符串

    我们使用列表推导和内置的 max 函数找到最大长度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-13
      • 1970-01-01
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      相关资源
      最近更新 更多