很高兴知道您收到了什么错误,但以下内容应该可以解决您的问题:
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)”格式。</p>
我使用了python 3.3。希望上面的代码适用于您原始帖子中的 python 2.x。对于 python 3.x,将“from StringIO import StringIO”更改为“from io import StringIO”,当然“print MultipleSeqAlignment”更改为“print(MultipleSeqAlignment)”。