python中的肌肉对齐

时间:2013-10-28 17:20:36

标签: python alignment biopython

我在使用python中的肌肉对齐打印输出时遇到问题。我的代码是:

from Bio.Align.Applications import MuscleCommandline
from StringIO import StringIO
from Bio import AlignIO

def align_v1 (Fasta): 
    muscle_cline = MuscleCommandline(input="hiv_protease_sequences_w_wt.fasta")
    stdout, stderr = muscle_cline()
    MultipleSeqAlignment = AlignIO.read(StringIO(stdout), "fasta") 
    print MultipleSeqAlignment 

有任何帮助吗?

1 个答案:

答案 0 :(得分:0)

知道你收到了什么错误会很好,但以下内容可以解决你的问题:

from Bio.Align.Applications import MuscleCommandline
from StringIO import StringIO
from Bio import AlignIO

muscle_exe = r"C:\muscle3.8.31_i86win32.exe" #specify the location of your muscle exe file

input_sequences = "hiv_protease_sequences_w_wt.fasta"
output_alignment = "output_alignment.fasta"

def align_v1 (Fasta): 
    muscle_cline = MuscleCommandline(muscle_exe, input=Fasta, out=output_alignment)
    stdout, stderr = muscle_cline()
    MultipleSeqAlignment = AlignIO.read(output_alignment, "fasta") 
    print MultipleSeqAlignment

align_v1(input_sequences)

在我的情况下,我收到了一个ValueError:

>>> AlignIO.read(StringIO(stdout), "fasta") 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\WinPython-64bit-3.3.2.3\python-3.3.2.amd64\lib\site-packages\Bio\AlignIO\__init__.py", line 427, in read
    raise ValueError("No records found in handle")
ValueError: No records found in handle

可以通过保存输出并使用AlignIO.read重新打开来避免这种情况。

我还收到了一个FileNotFoundError,可以通过指定肌肉exe文件的位置来避免。例如:

muscle_exe = r"C:\muscle3.8.31_i86win32.exe" 

有关此内容的说明显示在帮助(MuscleCommandline)中,但目前不在Biopython教程页面中。

最后,我假设您要使用不同的输入序列运行​​命令,因此我将函数修改为“function_name(input_file)”格式。

我使用的是python 3.3。希望上面的代码适用于原始帖子中的python 2.x.对于python 3.x,将“从StringIO import StringIO”更改为“from io import StringIO”,当然“将MultipleSeqAlignment”更改为“print(MultipleSeqAlignment)”。