Bio.AlignIO包

子模块

模块内容

作为比对对象的多序列比对输入/输出。

Bio.AlignIO接口故意与Bio.SeqIO非常相似,实际上两者是内部连接的。这两个模块使用相同的文件格式名称集(小写字符串)。从用户的角度来看,您可以使用Bio.AlignIO读入包含一个或多个比对的Phylip文件,也可以使用Bio.SeqIO读入这些比对中的序列。

Bio.AlignIO也在http://biopython.org/wiki/AlignIO和我们教程的整章中进行了说明:

输入

对于文件或句柄包含且只有一个对齐的典型特殊情况,请使用函数Bio.AlignIO.read()。这需要输入文件句柄(或在最新版本的Biopython中采用字符串形式的文件名)、格式字符串和每个比对的可选序列数量。它将返回单个MultipleSeqAlignment对象(如果不只有一条路线,则会引发异常):

>>> from Bio import AlignIO
>>> align = AlignIO.read("Phylip/interlaced.phy", "phylip")
>>> print(align)
Alignment with 3 rows and 384 columns
-----MKVILLFVLAVFTVFVSS---------------RGIPPE...I-- CYS1_DICDI
MAHARVLLLALAVLATAAVAVASSSSFADSNPIRPVTDRAASTL...VAA ALEU_HORVU
------MWATLPLLCAGAWLLGV--------PVCGAAELSVNSL...PLV CATH_HUMAN

对于一般情况,当句柄可以包含任意数量的对齐时,使用函数Bio.AlignIO.parse(.)它接受相同的参数,但返回一个给出MultipleSeqAlignment对象的迭代器(通常在for循环中使用)。如果要按编号随机访问路线,请将其转换为列表:

>>> from Bio import AlignIO
>>> alignments = list(AlignIO.parse("Emboss/needle.txt", "emboss"))
>>> print(alignments[2])
Alignment with 2 rows and 120 columns
-KILIVDDQYGIRILLNEVFNKEGYQTFQAANGLQALDIVTKER...--- ref_rec
LHIVVVDDDPGTCVYIESVFAELGHTCKSFVRPEAAEEYILTHP...HKE gi|94967506|receiver

大多数比对文件格式都可以串联,以便保存尽可能多的不同多序列比对。一个常见的示例是PHLYIP套件中工具seqboot的输出。有时可以有文件页眉和页脚,如浮雕对齐输出中所示。

输出

使用函数Bio.AlignIO.write(.),该函数接受一组完整的对齐对象(作为列表或迭代器)、输出文件句柄(或最新版本的Biopython中的文件名),当然还有文件格式:

from Bio import AlignIO
alignments = ...
count = SeqIO.write(alignments, "example.faa", "fasta")

如果使用句柄,请确保将其关闭以将数据刷新到磁盘::

from Bio import AlignIO
alignments = ...
with open("example.faa", "w") as handle:
    count = SeqIO.write(alignments, handle, "fasta")

通常,您需要调用此函数一次(使用所有对齐),然后关闭文件句柄。但是,对于PHYLIP这样的文件格式,其中顺序存储多个对齐(没有文件头和页脚),那么在使用句柄时,对Write函数的多个调用应该会按预期工作。

如果您使用的是文件名,则对Write函数的重复调用每次都会覆盖现有文件。

转换

Bio.AlignIO.Convert(.)函数为简单的对齐文件格式转换提供了一个简单的接口。此外,它可能使用特定于文件格式的优化,因此这也应该是最快的方式。

不过,通常可以将Bio.AlignIO.parse(.)使用Bio.AlignIO.write(.)序列文件转换函数。使用生成器表达式提供了一种内存高效的方式,可以将过滤或其他额外操作作为过程的一部分来执行。

文件格式

指定文件格式时,请使用小写字符串。Bio.SeqIO中也使用相同的格式名称,包括以下内容:

  • clustal-Clustal W或X的输出,另请参阅模块Bio.Cluastw,该模块可用于从Biopython运行命令行工具。

  • 浮雕-浮雕工具的“对”和“简单”对齐格式。

  • FASTA-通用序列文件格式,其中每条记录都以标识符行开头,以“>”字符开头,后跟序列行。

  • FASTA-m10-当与机器可读输出的-m 10命令行选项一起使用时,用于Bill Pearson的FASTA工具输出的成对比对。

  • IG-IntelliGenetics文件格式,显然与MASE对齐格式相同。

  • MSF-GCG MSF对齐格式,最初来自PileUp Tool。

  • Nexus-Nexus的输出,另请参阅模块Bio.Nexus,该模块还可以读取这些文件中的任何系统发育树。

  • PHYLIP-交错PHYLIP,由PHYLIP工具使用。

  • 顺序式-顺序式-顺序式。

  • PHYLIP-REALECT-PHYLIP式格式,允许使用更长的名称。

  • 斯德哥尔摩-PFAM使用的一种注释丰富的对齐文件格式。

  • Mauve-ProcedsiveMauve/Mauve的输出

请注意,虽然Bio.AlignIO可以读取上述所有文件格式,但它不能写入所有文件格式。

您还可以使用Bio.SeqIO支持的任何文件格式,例如“Fasta”或“ig”(如上所述),前提是文件中的序列长度都相同。

Bio.AlignIO.write(alignments, handle, format)

将完整的路线集写入文件。

参数:
  • 对齐-多个SeqAlignment对象或单个对齐对象的列表(或迭代器)。

  • Handle-要写入的文件句柄对象或字符串形式的文件名(请注意,旧版本的Biopython只接受句柄)。

  • 格式-描述要写入的文件格式的小写字符串。

调用此函数后应关闭句柄。

返回写入的路线数(整数形式)。

Bio.AlignIO.parse(handle, format, seq_count=None)

作为MultipleSeqAlignment对象迭代对齐文件。

参数:
  • Handle-文件的句柄,或字符串形式的文件名(请注意,旧版本的Biopython只接受句柄)。

  • 格式-描述文件格式的字符串。

  • SEQ_COUNT-可选整数,每次比对中预期的序列数。建议用于FASTA格式文件。

如果文件名在字符串‘filename’中,请使用:

>>> from Bio import AlignIO
>>> filename = "Emboss/needle.txt"
>>> format = "emboss"
>>> for alignment in AlignIO.parse(filename, format):
...     print("Alignment of length %i" % alignment.get_alignment_length())
Alignment of length 124
Alignment of length 119
Alignment of length 120
Alignment of length 118
Alignment of length 125

如果您有包含文件内容的字符串‘data’,请使用::

from Bio import AlignIO
from io import StringIO
my_iterator = AlignIO.parse(StringIO(data), format)

如果只需要一条记录,请使用Bio.AlignIO.read()函数。

Bio.AlignIO.read(handle, format, seq_count=None)

将对齐文件转换为单个MultipleSeqAlignment对象。

参数:
  • Handle-文件的句柄,或字符串形式的文件名(请注意,旧版本的Biopython只接受句柄)。

  • 格式-描述文件格式的字符串。

  • SEQ_COUNT-可选整数,每次比对中预期的序列数。建议用于FASTA格式文件。

如果控制柄不包含对齐或多个对齐,则会引发异常。例如,使用包含一条路线的PFAM/斯德哥尔摩文件:

>>> from Bio import AlignIO
>>> filename = "Clustalw/protein.aln"
>>> format = "clustal"
>>> alignment = AlignIO.read(filename, format)
>>> print("Alignment of length %i" % alignment.get_alignment_length())
Alignment of length 411

但是,如果您想要包含多个对齐的文件中的第一个对齐,则此函数将引发异常。

>>> from Bio import AlignIO
>>> filename = "Emboss/needle.txt"
>>> format = "emboss"
>>> alignment = AlignIO.read(filename, format)
Traceback (most recent call last):
    ...
ValueError: More than one record found in handle

请改用:

>>> from Bio import AlignIO
>>> filename = "Emboss/needle.txt"
>>> format = "emboss"
>>> alignment = next(AlignIO.parse(filename, format))
>>> print("First alignment has length %i" % alignment.get_alignment_length())
First alignment has length 124

如果要从句柄读取多条记录,则必须使用Bio.AlignIO.parse()函数。

Bio.AlignIO.convert(in_file, in_format, out_file, out_format, molecule_type=None)

在两个路线文件之间转换,返回路线数。

参数:
  • in_file-输入句柄或文件名

  • in_format-输入文件格式,小写字符串

  • 输出-输出句柄或文件名

  • OUT_FILE-输出文件格式,小写字符串

  • MELEGLER_TYPE-要应用的可选分子类型,包含“DNA”、“RNA”或“Protein”的字符串。

NOTE -如果您提供输出文件名,它将被打开,这将在没有警告的情况下覆盖任何现有文件。即使转换中止(例如,给定的OUT_FORMAT名称无效),也可能发生这种情况。

一些输出格式要求指定分子类型,而这不能由解析器确定。例如,将FASTA、Clustal或Phylip格式转换为Nexus:

>>> from io import StringIO
>>> from Bio import AlignIO
>>> handle = StringIO()
>>> AlignIO.convert("Phylip/horses.phy", "phylip", handle, "nexus", "DNA")
1
>>> print(handle.getvalue())
#NEXUS
begin data;
dimensions ntax=10 nchar=40;
format datatype=dna missing=? gap=-;
matrix
Mesohippus   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Hypohippus   AAACCCCCCCAAAAAAAAACAAAAAAAAAAAAAAAAAAAA
Archaeohip   CAAAAAAAAAAAAAAAACACAAAAAAAAAAAAAAAAAAAA
Parahippus   CAAACAACAACAAAAAAAACAAAAAAAAAAAAAAAAAAAA
Merychippu   CCAACCACCACCCCACACCCAAAAAAAAAAAAAAAAAAAA
'M. secundu' CCAACCACCACCCACACCCCAAAAAAAAAAAAAAAAAAAA
Nannipus     CCAACCACAACCCCACACCCAAAAAAAAAAAAAAAAAAAA
Neohippari   CCAACCCCCCCCCCACACCCAAAAAAAAAAAAAAAAAAAA
Calippus     CCAACCACAACCCACACCCCAAAAAAAAAAAAAAAAAAAA
Pliohippus   CCCACCCCCCCCCACACCCCAAAAAAAAAAAAAAAAAAAA
;
end;