代码之家  ›  专栏  ›  技术社区  ›  Amrith Krishna

Biopython成对对齐在运行循环时导致分段错误

  •  2
  • Amrith Krishna  · 技术社区  · 7 年前

    我正在尝试在中运行成对全局对齐方法 biopython 循环大约10000对字符串。每个字符串平均有20个字符长。对一对序列运行该方法效果良好。但如果在一个循环中运行,对于低至4对,则会导致分割错误。这怎么解决?

    from Bio import pairwise2
    def myTrial(source,targ):
    
         if source == targ:
             return [source,targ,source]
    
         alignments = pairwise2.align.globalmx(source, targ,1,-0.5)
         return alignments
    sour = ['najprzytulniejszy', 'sadystyczny', 'wyrzucić', 'świat']
    targ = ['najprzytulniejszym', 'sadystycznemu', 'wyrzucisz', 'świat']
    for i in range(4):
       a = myTrial(sour[i],targ[i])
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   Han Altae-Tran    7 年前

    分段错误不会发生,因为您正在使用循环,而是因为您正在为仅接受ascii字符串输入的对齐模式提供非ascii字符作为输入。幸运的是, Bio.pairwise2.align.globalmx 还允许将包含任意ascii字符串和非ascii字符的列表作为标记进行对齐(即对齐字符串列表,例如 ['ABC', 'ABD'] 具有 ['ABC', 'GGG'] 生成类似于

    ['ABC', 'ABD', '-'  ]
    ['ABC', '-'  , 'GGG']
    

    或者在您的情况下,对齐非ascii字符列表,例如 ['ś', 'w', 'i', 'a', 't'] ['w', 'y', 'r', 'z', 'u', 'c', 'i', 's', 'z'] 生成类似于

    ['ś', 'w', '-', '-', '-', '-', '-', 'i', 'a', 't', '-', '-']
    ['-', 'w', 'y', 'r', 'z', 'u', 'c', 'i', '-', '-', 's', 'z']
    

    要用biopython来实现这一点,在你的代码中,替换

    alignments = pairwise2.align.globalmx(source, targ,1,-0.5)
    

    具有

    alignments = pairwise2.align.globalmx(list(source), list(targ), 1, -0.5, gap_char=['-'])
    

    所以对于

    source = 'świat'
    targ = 'wyrzucisz'
    

    修改后的代码将产生

    [(['ś', 'w', '-', '-', '-', '-', '-', 'i', 'a', 't', '-', '-'],
      ['-', 'w', 'y', 'r', 'z', 'u', 'c', 'i', '-', '-', 's', 'z'],
      2.0,
      0,
      12)]
    

    而不是分割错误。

    由于列表中的每个标记只有一个字符长,您还可以使用以下方法将结果对齐的列表转换回字符串:

    new_alignment = []
    
    for aln in alignment:
        # Convert lists back into strings
        a = ''.join(aln[0])
        b = ''.join(aln[1])
    
        new_aln = (a, b) + aln[2:]
        new_alignment.append(new_aln)
    

    在上面的例子中, new_alignment 那么

    [('św-----iat--', '-wyrzuci--sz', 2.0, 0, 12)]
    

    如所愿。