首页 > 解决方案 > 如何使用 sys.args[] 或 getopts 通过 Python 运行对齐命令

问题描述

如何使用 sys.args[] 或 getopts 通过 python 运行“MAFFT”对齐?

我想通过 python 自动对齐,这样我就不必为不同的文件多次使用独立的命令行 MAFFT。它可能会非常耗时。

理想情况下,我想要一个函数来执行此操作,以便可以将不同的文件输入其中以进行 MAFFT 对齐。

干杯。

标签: pythonalignmentbioinformaticsbiopythonseq

解决方案


BioPython 有一个用于多重对齐程序 MAFFT 的命令行包装器

>>> from Bio.Align.Applications import MafftCommandline
>>> mafft_exe = "/opt/local/mafft"
>>> in_file = "../Doc/examples/opuntia.fasta"
>>> mafft_cline = MafftCommandline(mafft_exe, input=in_file)
>>> print(mafft_cline)
/opt/local/mafft ../Doc/examples/opuntia.fasta

如果 mafft 二进制文件在路径上(通常在 Unix 风格的操作系统上是这种情况),那么您不需要提供可执行位置:

>>> from Bio.Align.Applications import MafftCommandline
>>> in_file = "../Doc/examples/opuntia.fasta"
>>> mafft_cline = MafftCommandline(input=in_file)
>>> print(mafft_cline)
mafft ../Doc/examples/opuntia.fasta

请注意,MAFFT 会将对齐写入标准输出,您可能希望将其保存到文件中然后解析,例如:

stdout, stderr = mafft_cline()
with open("aligned.fasta", "w") as handle:
    handle.write(stdout)
from Bio import AlignIO
align = AlignIO.read("aligned.fasta", "fasta")

或者,要直接使用 AlignIO 解析输出,您可以使用 StringIO 将字符串转换为句柄:

stdout, stderr = mafft_cline()
from StringIO import StringIO
from Bio import AlignIO
align = AlignIO.read(StringIO(stdout), "fasta")

推荐阅读