在 GitHub 上编辑此页面

用于多序列比对的模块,AlignIO

此页面介绍 Bio.AlignIO,这是 Biopython 1.46 及更高版本中一个新的多序列比对输入/输出接口。

除了内置的 API 文档之外,教程 中有一整章介绍 Bio.AlignIO,尽管有一些重叠,但除了本页之外,它也值得一读。 此外,还有 API 文档(您可以在线阅读,或使用 help() 命令在 Python 中阅读)。

目标

您可能已经熟悉 Bio.SeqIO 模块,该模块处理包含一个或多个序列的文件,这些序列表示为 SeqRecord 对象。 SeqIO 模块的目的是为各种序列文件格式提供一个简单的统一接口。

类似地,Bio.AlignIO 处理包含一个或多个序列比对的文件,这些比对表示为 Alignment 对象。 Bio.AlignIO 使用与 Bio.SeqIO 中相同的函数集进行输入和输出,并且支持的文件格式也使用相同的名称。

请注意,Bio.AlignIO 的加入确实导致了在处理某些文件格式时出现一些重复或选择。 例如,Bio.AlignIOBio.Nexus 都可以从 NEXUS 文件中读取比对,但 Bio.NEXUS 允许更多控制和使用树。

我的愿景是,对于读取或写入序列比对,您应该尝试 Bio.AlignIO 作为您的首选。 在某些情况下,您可能只关心序列本身,在这种情况下,请尝试直接使用 Bio.SeqIO 在比对文件上。 除非您有一些非常具体的需要,否则我希望这应该足够了。

彼得

文件格式

此表列出了 Bio.AlignIO 可以读取和写入的文件格式,以及首次支持该格式的 Biopython 版本。

格式名称是一个简单的简写字符串,与 Bio.SeqIO 中使用的名称相匹配。 尽可能地,我们使用与 BioPerl 的 SeqIOEMBOSS 相同的名称。

格式名称 读取 写入 注释
clustal 1.46 1.46 Clustal X 和 Clustal W 的比对格式
emboss 1.46 EMBOSS 简单/配对比对格式。
fasta 1.46 1.48 这指的是为 Bill Pearson 的 FASTA 工具引入的输入文件格式,其中每个记录以“>”行开头。 请注意,在此格式中存储多个比对是模棱两可的。 在版本 1.48 之前,使用 AlignIO 写入 FASTA 文件失败(错误 2557)。
fasta-m10 1.46 这指的是 Bill Pearson 的 FASTA 工具的成对比对输出,特别是使用 -m 10 命令行选项时的机器可读版本。 FASTA 工具的默认免费格式文本输出不受支持。
ig 1.47 这指的是 IntelliGenetics 文件格式,通常用于普通的未比对序列。 MASE 工具似乎也使用相同的文件格式进行比对,因此将其包含在此表中。 参见 MASE 格式
maf 1.69 1.69 多重比对格式 (MAF) 由 Multiz 生成。 用于存储全基因组比对,例如来自 UCSC 基因组浏览器的 30 路比对。
mauve 1.70 1.70 Mauve 的扩展多重 FastA (XMFA) 文件格式
msf 1.75 GCG MSF 文件格式。
nexus 1.46 1.48 也称为 PAUP 格式。 内部使用 Bio.Nexus。 每个文件只支持一个比对。
phylip 1.46 1.46 这是对交错 PHYLIP 格式的严格解释,它将名称截断为 10 个字符。
phylip-sequential 1.59 1.59 这是对顺序 PHYLIP 格式的严格解释,它将名称截断为 10 个字符。
phylip-relaxed 1.58 1.58 这是对 PHYLIP 格式的宽松解释,它允许长名称。
stockholm 1.46 1.46 也称为 PFAM 格式,此文件格式支持丰富的注释。
       

此外,您可以将比对中的(带间隙的)序列存储在许多 Bio.SeqIO 支持的文件格式 中。 这种最常见的例子是将比对存储在简单的 fasta 格式中。 但是,将多个比对存储在一个这样的文件中是模棱两可的 - 并且不推荐这样做。

比对输入

Bio.SeqIO 中一样,有两个用于比对输入的函数。 它们是 Bio.AlignIO.read(),用于文件只包含一个比对,以及更通用的 Bio.AlignIO.parse(),用于文件可能包含多个独立的比对。

这两个函数都有两个必需的参数:文件句柄和文件格式。 与 Bio.SeqIO 一样,Biopython 坚持要求您显式地给出预期的文件格式,而不是尝试根据文件名或内容来猜测。 文件格式指定为小写字符串,请参见上面的表格。

例如,我们将查看纤维蛋白原 γ 链的 PFAM 种子比对 PF09395 Fib_gamma。 在撰写本文时,它包含 14 个序列,比对长度为 77 个氨基酸,如下面的 PFAM 或 Stockholm 格式所示

# STOCKHOLM 1.0
#=GS Q7ZVG7_BRARE/37-110  AC Q7ZVG7.1
#=GS Q6X871_SCAAQ/1-77    AC Q6X871.1
#=GS O02676_CROCR/1-77    AC O02676.1
#=GS Q6X869_TENEC/1-77    AC Q6X869.1
#=GS FIBG_HUMAN/40-116    AC P02679.3
#=GS O02689_TAPIN/1-77    AC O02689.1
#=GS O02688_PIG/1-77      AC O02688.1
#=GS O02672_9CETA/1-77    AC O02672.1
#=GS O02682_EQUPR/1-77    AC O02682.1
#=GS Q6X870_CYNVO/1-77    AC Q6X870.1
#=GS FIBG_RAT/40-116      AC P02680.3
#=GS Q6X866_DROAU/1-76    AC Q6X866.1
#=GS O93568_CHICK/40-116  AC O93568.1
#=GS FIBG_XENLA/38-114    AC P17634.1
Q7ZVG7_BRARE/37-110          GFGTYCPTTCGVADYLQRYKPDMDKKLDDMEQDLEEIANLTRGAQDKVVYLK---DSEAQAQKQSPDTYIKKSSNML
Q6X871_SCAAQ/1-77            RFGSYCPTTCGIADFLSTYQATVDKDLQTLEDILSQAENKTMEAKELVKAIQVSYLPEDPARPNRVELATKDSKKMM
O02676_CROCR/1-77            RFGSYCPTTCGIADFLSTYQTGVXNDLRTLEDLLSGIENKTSEAKELIKSIQVSYNPNEPPKPNTIVSATKDSKKMM
Q6X869_TENEC/1-77            RFGSYCPTTCGIADFLSTYQGSIDKDLQTLEDILNQVENKTXEASELIKSIQVSYNPDEPPRPNMIEGATQKSKKML
FIBG_HUMAN/40-116            RFGSYCPTTCGIADFLSTYQTKVDKDLQSLEDILHQVENKTSEVKQLIKAIQLTYNPDESSKPNMIDAATLKSRKML
#=GS FIBG_HUMAN/40-116    DR PDB; 1qvh L;14-45
#=GS FIBG_HUMAN/40-116    DR PDB; 1fza C;88-90
#=GS FIBG_HUMAN/40-116    DR PDB; 1fzb C;88-90
#=GS FIBG_HUMAN/40-116    DR PDB; 1fzb F;88-90
#=GS FIBG_HUMAN/40-116    DR PDB; 1qvh I;14-45
#=GS FIBG_HUMAN/40-116    DR PDB; 1fza F;88-90
#=GR FIBG_HUMAN/40-116    SS CCXCXBXXHHHHHHHHHHHHHHHHHHHHHHHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-CC
O02689_TAPIN/1-77            RFGSYCPTTCGIADFLSTYQTXVDKDLQVLEDILNQAENKTSEAKELIKAIQVRYKPDEPTKPGGIDSATRESKKML
O02688_PIG/1-77              RFGSYCPTMCGIAGFLSTYQNTVEKDLQNLEGILHQVENKTSEARELIKAIQISYNPEDLSKPDRIQSATKESKKML
O02672_9CETA/1-77            RFGSYCPTTCGVADFLSNYQTSVDKDLQNLEGILYQVENKTSEARELVKAIQISYNPDEPSKPNNIESATKNSKRMM
O02682_EQUPR/1-77            RFGSYCPTTCGIADFLSNYQTSVDKDLQDFEDILHRAENQTSEAEQLIQAIRTSYNPDEPPKTGRIDAATRESKKMM
Q6X870_CYNVO/1-77            RFGSYCPTTCGIADFLSTYQTKVDEDLQNLEDILYRVENRTSEAKELIKAIQVDYNPGEPPKQSVTEGATQNAKKMV
FIBG_RAT/40-116              RFGSYCPTTCGISDFLNSYQTDVDTDLQTLENILQRAENRTTEAKELIKAIQVYYNPDQPPKPGMIEGATQKSKKMV
Q6X866_DROAU/1-76            RFGSYCPTTCGIADFLNKYQTTIDQDLRHMEETLRDIDNKTAESTLLIQKIQIGQTPDPRPQ-NVIGDVTQKSRKMI
O93568_CHICK/40-116          RFGSYCPTTCGIADFFNKYRLTTDGELLEIEGLLQQATNSTGSIEYLIQHIKTIYPSEKQTLPQSIEQLTQKSKKII
#=GS O93568_CHICK/40-116  DR PDB; 1m1j F;14-90
#=GS O93568_CHICK/40-116  DR PDB; 1m1j C;14-90
#=GR O93568_CHICK/40-116  SS CCEEEEE-CCCCCCCCCCCCCHHHCCCCCHHHHHHHHHHHHHHHCCCCCCHHHHS-SSTT--SS-HHHHHHHHHHHH
FIBG_XENLA/38-114            RFGEYCPTTCGISDFLNRYQENVDTDLQYLENLLTQISNSTSGTTIIVEHLIDSGKKPATSPQTAIDPMTQKSKTCW
#=GC SS_cons                 CCECEEE-CCCCCCCCCCCCCHHHCCCCCHHHHHHHHHHHHHHHCCCCCCHHHHS-SSTT--SS-HHHHHHHHHHCC
#=GC seq_cons                RFGSYCPTTCGIADFLSsYQssVDcDLQsLEsILpplEN+ToEAc-LIKuIQlsYsP--ss+PstI-uATpcSKKMl
//

您会注意到这里有很多注释信息,包括每个序列的登录号,以及人类和鸡纤维蛋白原蛋白的一些 PDB 数据库交叉引用和二级结构信息。

此文件包含一个比对,因此我们可以使用 Bio.AlignIO.read() 函数将其加载到 Biopython 中。 假设您已从 Sanger 下载了此比对,或已复制粘贴上面的文本并将其保存为名为 PF09395_seed.sth 的文件。 然后在 python 中

from Bio import AlignIO

alignment = AlignIO.read(open("PF09395_seed.sth"), "stockholm")
print("Alignment length %i" % alignment.get_alignment_length())
for record in alignment:
    print(record.seq + " " + record.id)

应该会给出

Alignment length 77
GFGTYCPTTCGVADYLQRYKPDMDKKLDDMEQDLEEIANLTRGAQDKVVYLK---DSEAQAQKQSPDTYIKKSSNML Q7ZVG7_BRARE/37-110
RFGSYCPTTCGIADFLSTYQATVDKDLQTLEDILSQAENKTMEAKELVKAIQVSYLPEDPARPNRVELATKDSKKMM Q6X871_SCAAQ/1-77
RFGSYCPTTCGIADFLSTYQTGVXNDLRTLEDLLSGIENKTSEAKELIKSIQVSYNPNEPPKPNTIVSATKDSKKMM O02676_CROCR/1-77
RFGSYCPTTCGIADFLSTYQGSIDKDLQTLEDILNQVENKTXEASELIKSIQVSYNPDEPPRPNMIEGATQKSKKML Q6X869_TENEC/1-77
RFGSYCPTTCGIADFLSTYQTKVDKDLQSLEDILHQVENKTSEVKQLIKAIQLTYNPDESSKPNMIDAATLKSRKML FIBG_HUMAN/40-116
RFGSYCPTTCGIADFLSTYQTXVDKDLQVLEDILNQAENKTSEAKELIKAIQVRYKPDEPTKPGGIDSATRESKKML O02689_TAPIN/1-77
RFGSYCPTMCGIAGFLSTYQNTVEKDLQNLEGILHQVENKTSEARELIKAIQISYNPEDLSKPDRIQSATKESKKML O02688_PIG/1-77
RFGSYCPTTCGVADFLSNYQTSVDKDLQNLEGILYQVENKTSEARELVKAIQISYNPDEPSKPNNIESATKNSKRMM O02672_9CETA/1-77
RFGSYCPTTCGIADFLSNYQTSVDKDLQDFEDILHRAENQTSEAEQLIQAIRTSYNPDEPPKTGRIDAATRESKKMM O02682_EQUPR/1-77
RFGSYCPTTCGIADFLSTYQTKVDEDLQNLEDILYRVENRTSEAKELIKAIQVDYNPGEPPKQSVTEGATQNAKKMV Q6X870_CYNVO/1-77
RFGSYCPTTCGISDFLNSYQTDVDTDLQTLENILQRAENRTTEAKELIKAIQVYYNPDQPPKPGMIEGATQKSKKMV FIBG_RAT/40-116
RFGSYCPTTCGIADFLNKYQTTIDQDLRHMEETLRDIDNKTAESTLLIQKIQIGQTPDPRPQ-NVIGDVTQKSRKMI Q6X866_DROAU/1-76
RFGSYCPTTCGIADFFNKYRLTTDGELLEIEGLLQQATNSTGSIEYLIQHIKTIYPSEKQTLPQSIEQLTQKSKKII O93568_CHICK/40-116
RFGEYCPTTCGISDFLNRYQENVDTDLQYLENLLTQISNSTSGTTIIVEHLIDSGKKPATSPQTAIDPMTQKSKTCW FIBG_XENLA/38-114

比对输出

Bio.SeqIO 中一样,有一个输出函数 Bio.AlignIO.write()。 它接受三个参数:一些比对,要写入的文件句柄以及要使用的格式。

您可以使用 format 函数将比对转换为包含指定文件格式的比对的字符串,例如

AlignIO.read(open("PF09395_seed.sth"), "stockholm")
print(format(alignment, "fasta"))

或使用 f-string

print(f"Alignment in FASTA format:\n\n{alignment:fasta}")

有关更多详细信息,请参考教程中的 Bio.AlignIO 章节。

文件格式转换

假设您有一个包含 PHYLIP 比对的文件,您想将其转换为 PFAM/Stockholm 格式

from Bio import AlignIO

input_handle = open("example.phy", "rU")
output_handle = open("example.sth", "w")

alignments = AlignIO.parse(input_handle, "phylip")
AlignIO.write(alignments, output_handle, "stockholm")

output_handle.close()
input_handle.close()

通过更改格式字符串,该代码可用于在任何支持的文件格式之间进行转换。