首页 > 编程知识 正文

automotive research&developmentcenter,world journal of clinical cases

时间:2023-05-04 16:30:28 阅读:277404 作者:4826

Mafft介绍一提到多重序列比对,很多人禁不住就想到ClustalW(Clustalx为ClustalW的GUI版),其实有一款多重序列比对软件-MAFFT,不论从比对速度(Muscle>MAFFT>ClustalW>T-Coffee),还是比对准确性(MAFFT>Muscle>T-Coffee>ClustalW)来说,其相比于ClustalW(或ClustalX)有过之而无不及,所以这里强烈推荐使用MAFFT这款多重比对软件。

PS: 不同比对软件的比较,有兴趣的童鞋可以下载这篇文章看看:

Wong K M, Suchard M A, Huelsenbeck J P. Alignment uncertainty and genomic analysis. Science, 2008, 319: 473-6.

以上序言内容摘自:http://blog.sciencenet.cn/u/raindyok

背景:生物学相关专业,2个月前wet转dry,学习Python大概2个月不到的时间。

问题:因为实验需要,要对数百个fasta文件分别进行多序列比对(每个fasta文件里都是数条待比对的序列),无奈Mafft软件仅支持单个fasta文件的分析,而且每次都需要输入:输入文件、输出文件、输出格式、比对策略、额外参数等,最后还需要进行一次确认。国内外的搜索引擎都查了个遍,都没有找到办法支持批量化处理。Python软件包Biopython到是可以支持对Mafft的调用,但是...谁用谁知道吧,反正试了很久没有成功,并且网上对Biopython调用Mafft的报错结果也都没有相应的解决方案,遂放弃此方法。

使用过Mafft的伙伴应该知道,Windows平台上运行Mafft有两个版本的软件,之前对单个文件进行分析的时候使用的Ubuntu版本(毕竟官方推荐),但是学习了Biopython包里的调用方法,并且对Ubuntu并不熟悉,所以又下了一个All-in-on version进行琢磨。

Mafft的使用:找到解压文件夹“Mafft-win”,然后打开“mafft.bat”

2. 输入“输入文件”:(不输路径的话默认为同一文件夹内)

3. 输入“输出文件”:(给输出文件取个名字,不输路径的话默认为同一文件夹内)

4. 输入“输出格式”:(我一般选:3. Fasta format / Sorted)

5. 输入“比对策略”:(我一般选:1. --auto)

6. 输入“其他参数”:(如果没有直接敲回车)

7. 输入“Y”进行确认:(其实command命令已经写出来了,但是后面还是绕了很大的弯)

8. 开始比对,结束后的界面:

分析:因为使用Biopython包没能成功调用Mafft,就又想到了bat文件,然后琢磨了大半天以后发现可以start Mafft,却没有办法像上面这样一步步输入命令。然后无意间发现Mafft可以用单行命令,就是图中已经显示的command。

思路:于是想到了新的思路:用cmd或者Powershell输入单行命令进行单个fasta文件的多序列比对,再用Python做循环。

解决:(为了方便看清,用的两个空格分割)cmd单行命令:

cd C:/Users/Franklin/Mafft-win && mafft -auto test.fasta > test_output.fasta

# 如果输入文件和输出文件不给路径的话默认是“Mafft-win”文件夹下,如果给路径的话,路径中的中文无法识别,另外路径中的空格后的内容会被当做新的参数,所以路径要用引号括起来,比如:“C:/Users/Franklin/Data Analysis/Input/test.fasta”

2. Python实现循环:

'''Name: Sequence Align with MafftAim: Align the virus sequence in all the fasta filesAuthor: Franklin ZhangDate: 2020/May/21'''

import os

import subprocess

print("n*** Start: [Sequence Align with Mafft]")

print("*** This program will align the virus sequence in all the fasta files.n")

# Get the file list

fileList = os.listdir("C:\Users\Franklin\Input")

i = len(fileList)

j = 0

# Align the sequence file by file

for file in fileList:

j += 1

print("Going to do the alignment:{}[Schedule:{}/{}]".format(file, j, i))

inputFileName = "C:/Users/Franklin/Input/{}".format(file)

inputFileName = '''"{}"'''.format(inputFileName)

outputFileName = "C:/Users/Franklin/Output/" + file[:file.index(".fasta")] + "-align.fasta"

outputFileName = '''"{}"'''.format(outputFileName)

cmd = "cd C:/Users/Franklin/Mafft-win && mafft --auto " + "{}>{}".format(inputFileName, outputFileName)

subprocess.call(cmd, shell=True)

print("*** [newAnalysis_6_alignmentWithMafft] Done.")

总结:程序其实很简单,就是获取Input文件夹下所有fasta文件,调用cmd输入命令进行比对,存到Output文件夹内。速度我觉得还行,应该也是可以使用多线程来做的。总之很方便,开始运行就丢那不用管了。其实拿到cmd的那句单行命令,后面做循环就很简单了,有很多方法可以做循环,但目前只会Python。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。