StupidBeauty
Read times:1980Posted at:Fri May 6 03:55:53 2011
- no title specified

BioPython教程翻译: 6.4.1 ClustalW

本文章来自Kate dNA的勃客: http://stupidbeauty.com/KNA/2011/05/biopython%e6%95%99%e7%a8%8b%e7%bf%bb%e8%af%91%ef%bc%9a6-4-1%c2%a0%c2%a0clustalw/

原文位置: http://biopython.org/DIST/docs/tutorial/Tutorial.html#htoc75

6.4.1 ClustalW

ClustalW是一个流行的多序列比对命令行工具(还有一个图形界面的版本 ,叫 ClustalX)。Biopython的Bio.Align.Applications 模块中有一个为这个比对工具(和其它工具)而写的包装器

在尝试着从 Python 中使用 ClustalW 之前,你应当先在命令行中手动试着运行一下ClustalW 工具,熟悉一下其它的选项。你将会发现Biopython 的包装器与实际的命令行API 是非常一 致的:

>>> from Bio.Align.Applications import ClustalwCommandline

>>> help(ClustalwCommandline)

...

对于最基本的使用来说,你所需要的就是一个FASTA 输入文件 ,例如 opuntia.fasta (可以在网上找到 ,或者在 Biopython 源代码的 Doc/examples 子目录中找到 )。这是一个小的FASTA 文件 ,其中包含咯 7个仙人掌DNA 序列(来自仙人 掌科 Opuntia )。

默认情况下,ClustalW会生成一个比对文件和一个导向树文件,它们的名字是按照输入FASTA 文件来起的 ,在这个例子中就是 opuntia.aln opuntia.dnd ,但是你可以覆盖这个设置或者明确指定

>>> from Bio.Align.Applications import ClustalwCommandline

>>> cline = ClustalwCommandline("clustalw2", infile="opuntia.fasta")

>>> print cline

clustalw2 -infile=opuntia.fasta

注意,我们提供的可执行程序名字是 clustalw2 ,以表明我们安装的是版本 2,它与版本 1的文件名( clustalw ,默认值)不同。幸运的是 ,这两个版本都支持相同的命令行参数(并且 ,事实上它们的意义应当也是相同的 )。

你可能会发现,即使你已经安装咯ClustalW ,上面的命令还是不起作用–你可能会看到这样一个错误消息“command not found”(没有找到命令) (尤其是在 Windows 上)。这表示ClustalW 可执行程序不在你的PATH (一个环境变量 ,其中是要在其中搜索的目录的列表 。你可以 :更新你的PATH ,以 包含你安装ClustalW 工具的位置(具体怎么做取决于你的操作系统);或者简单地输入这个工具的完整的路径。例如

>>> import os

>>> from Bio.Align.Applications import ClustalwCommandline

>>> clustalw_exe = r"C:Program Filesnew clustalclustalw2.exe"

>>> clustalw_cline = ClustalwCommandline(clustalw_exe, infile="opuntia.fasta")

>>> assert os.path.isfile(clustalw_exe), "Clustal W executable missing"

>>> stdout, stderr = clustalw_cline()

记住,在Python 中,字符串 n t 默认会 被解释成一个换行符和一个制表符–所以我们放咯一个“r”在开头,让它成为一个原始字符串,不要像破折号前面说的那样解释。在指定一个Windows 风格的文件名时 ,这样做比较好。

最后一行要求Biopython 的版本大于或等于1.55,以通过我们的包装器对象来运行这个命令行工具 。这个包装器在内部使用 subprocess 模块 ,它现在是在Python 里运行另一个程序的首选方式 。它代替咯以前的方式 ,比如说 os.system() os.popen* 函数。

好咯,现在可以了解了解命令行工具是如何 “工作”的咯。当你在命令行运行一个工具的时候 ,它通常会直接将文字输出到屏幕上 。这种文字可以捕获或者重定向 ,使用两个叫做标准输出 (普通结果) 和标准错误 (错误消息和调试消息)的“管道”就能做到。另外还有标准输入,它是那些 被提供给这个工具的文字。这些名字的缩写是stdin 、stdout 和stderr。当工具运行结束后,会产生一个返回值(一个整数 ),通常会用 0来表示成功。

当你使用Biopython 包装器像例子中这样来运行命令行工具时,它会等待那个工具结束 ,再检查它的返回值。如果返回 值不是0(表示有错误发生),那么就会抛出一个异常。接下来包装器会返回 2个字符串,stdout和stderr

对于ClustalW 来说,当它是在命令行运行的时候 ,所有的重要的输出信息 都会直接写入到输出文件中。在你等待的时候 (通过stdout 或者stderr)输出到屏幕上的所有东西都是枯燥的,可以忽略(假设它是正常工作的)。

我们关心的是那2个输出文件:比对信息和导向树。我们不告诉ClustalW 要用什么做文件名 ,但它会按照默认情况根据输入文件来取名 。在这个例子中,输出应当是在文件 opuntia.aln 。现在你应该已经知道如何使用 Bio.AlignIO 来读取比对信息咯

>>> from Bio import AlignIO

>>> align = AlignIO.read("opuntia.aln", "clustal")

>>> print align

SingleLetterAlphabet() alignment with 7 rows and 906 columns

TATACATTAAAGAAGGGGGATGCGGATAAATGGAAAGGCGAAAG...AGA gi|6273285|gb|AF191659.1|AF191

TATACATTAAAGAAGGGGGATGCGGATAAATGGAAAGGCGAAAG...AGA gi|6273284|gb|AF191658.1|AF191

TATACATTAAAGAAGGGGGATGCGGATAAATGGAAAGGCGAAAG...AGA gi|6273287|gb|AF191661.1|AF191

TATACATAAAAGAAGGGGGATGCGGATAAATGGAAAGGCGAAAG...AGA gi|6273286|gb|AF191660.1|AF191

TATACATTAAAGGAGGGGGATGCGGATAAATGGAAAGGCGAAAG...AGA gi|6273290|gb|AF191664.1|AF191

TATACATTAAAGGAGGGGGATGCGGATAAATGGAAAGGCGAAAG...AGA gi|6273289|gb|AF191663.1|AF191

TATACATTAAAGGAGGGGGATGCGGATAAATGGAAAGGCGAAAG...AGA gi|6273291|gb|AF191665.1|AF191

假如你感兴趣的话(这是一个支线剧情),ClustalW 创建的 opuntia.dnd 文件就是一个标准的Newick 树文件 ,可以 Bio.Phylo 处理:

>>> from Bio import Phylo

>>> tree = Phylo.read("opuntia.dnd", "newick")

>>> Phylo.draw_ascii(tree)

_______________ gi|6273291|gb|AF191665.1|AF191665

__________________________|

| | ______ gi|6273290|gb|AF191664.1|AF191664

| |__|

| |_____ gi|6273289|gb|AF191663.1|AF191663

|

_|_________________ gi|6273287|gb|AF191661.1|AF191661

|

|__________ gi|6273286|gb|AF191660.1|AF191660

|

| __ gi|6273285|gb|AF191659.1|AF191659

|___|

| gi|6273284|gb|AF191658.1|AF191658

12 章里面更深入地说明咯Biopython’s 对系统发生(phylogenetic)树的支持。

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands