此页面介绍 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.AlignIO
和 Bio.Nexus
都可以从 NEXUS 文件中读取比对,但 Bio.NEXUS
允许更多控制和使用树。
我的愿景是,对于读取或写入序列比对,您应该尝试 Bio.AlignIO
作为您的首选。 在某些情况下,您可能只关心序列本身,在这种情况下,请尝试直接使用 Bio.SeqIO 在比对文件上。 除非您有一些非常具体的需要,否则我希望这应该足够了。
此表列出了 Bio.AlignIO 可以读取和写入的文件格式,以及首次支持该格式的 Biopython 版本。
格式名称是一个简单的简写字符串,与 Bio.SeqIO 中使用的名称相匹配。 尽可能地,我们使用与 BioPerl 的 SeqIO 和 EMBOSS 相同的名称。
格式名称 | 读取 | 写入 | 注释 |
---|---|---|---|
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()
通过更改格式字符串,该代码可用于在任何支持的文件格式之间进行转换。