Bio.AlignIO 包
子模块
- Bio.AlignIO.ClustalIO 模块
- Bio.AlignIO.EmbossIO 模块
- Bio.AlignIO.FastaIO 模块
- Bio.AlignIO.Interfaces 模块
- Bio.AlignIO.MafIO 模块
- Bio.AlignIO.MauveIO 模块
- Bio.AlignIO.MsfIO 模块
- Bio.AlignIO.NexusIO 模块
- Bio.AlignIO.PhylipIO 模块
- Bio.AlignIO.StockholmIO 模块
模块内容
将多个序列比对输入/输出为比对对象。
Bio.AlignIO 接口的设计有意与 Bio.SeqIO 非常相似,事实上这两个接口在内部是连接的。这两个模块使用相同的格式名称集(小写字符串)。从用户的角度来看,可以使用 Bio.AlignIO 读取包含一个或多个比对的 PHYLIP 文件,或者可以使用 Bio.SeqIO 读取这些比对中的序列。
Bio.AlignIO 还在 https://biopython.pythonlang.cn/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 的输出。有时,可能会存在文件头和文件尾,如 EMBOSS 比对输出中所示。
输出
使用 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 的输出。
emboss - EMBOSS 工具的“pairs”和“simple”比对格式。
fasta - 通用序列文件格式,其中每个记录以一个以“>”字符开头的标识符行开头,后面是序列行。
fasta-m10 - 对于 Bill Pearson 的 FASTA 工具在使用 -m 10 命令行选项用于机器可读输出时输出的成对比对。
ig - IntelliGenetics 文件格式,显然与 MASE 比对格式相同。
msf - GCG MSF 比对格式,最初来自 PileUp 工具。
nexus - NEXUS 的输出,另请参见 Bio.Nexus 模块,该模块还可以读取这些文件中的任何系统发育树。
phylip - 交错的 PHYLIP,如 PHYLIP 工具所使用。
phylip-sequential - 顺序的 PHYLIP。
phylip-relaxed - PHYLIP 类格式,允许更长的名称。
stockholm - PFAM 使用的一种包含丰富注释的比对文件格式。
mauve - progressiveMauve/Mauve 的输出
请注意,虽然 Bio.AlignIO 可以读取以上所有文件格式,但它不能写入所有格式。
您还可以使用 Bio.SeqIO 支持的任何文件格式,例如“fasta”或“ig”(如上所列),前提是文件中的序列长度相同。
- Bio.AlignIO.write(alignments, handle, format)
将完整的一组比对写入文件。
- 参数
alignments - MultipleSeqAlignment 对象的列表(或迭代器),或单个比对对象。
handle - 要写入的文件句柄对象,或文件名作为字符串(请注意,Biopython 的旧版本只接受句柄)。
format - 描述要写入的文件格式的小写字符串。
您应该在调用此函数后关闭句柄。
返回写入的比对数量(以整数形式)。
- Bio.AlignIO.parse(handle, format, seq_count=None)
将比对文件作为 MultipleSeqAlignment 对象进行迭代。
- 参数
handle - 文件句柄,或文件名作为字符串(请注意,Biopython 的旧版本只接受句柄)。
format - 描述文件格式的字符串。
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 的旧版本只接受句柄)。
format - 描述文件格式的字符串。
seq_count - 可选整数,每个比对中预期的序列数量。建议用于 fasta 格式文件。
如果句柄不包含任何比对,或包含多个比对,则会引发异常。例如,使用包含一个比对的 PFAM/Stockholm 文件
>>> 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 - 输入文件格式,小写字符串
output - 输出句柄或文件名
out_file - 输出文件格式,小写字符串
molecule_type - 可选的分子类型,用于应用,字符串包含 "DNA"、"RNA" 或 "protein"。
注意 - 如果您提供输出文件名,它将被打开,这将覆盖任何现有的文件,不会发出警告。即使转换中止(例如,给出了无效的 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;