PHYLIP多序列比对格式 (skbio.io.format.phylip

PHYLIP文件格式存储多序列对齐。这种格式最初是在joefelsenstein的PHYLIP包中定义和使用的 [1], 并得到了其他几个生物信息学工具(如RAxML)的支持 [2]) . 见 [3] 对于原始格式说明,以及 [4][5] 更多说明。

PHYLIP格式文件的示例 [3]:

      5    42
Turkey    AAGCTNGGGC ATTTCAGGGT GAGCCCGGGC AATACAGGGT AT
Salmo gairAAGCCTTGGC AGTGCAGGGT GAGCCGTGGC CGGGCACGGT AT
H. SapiensACCGGTTGGC CGTTCAGGGT ACAGGTTGGC CGTTCAGGGT AA
Chimp     AAACCCTTGC CGTTACGCTT AAACCGAGGC CGGGACACTC AT
Gorilla   AAACCCTTGC CGGTACGCTT AAACCATTGC CGGTACGCTT AA

备注

上述PHYLIP文件的原始版权声明:

(c) Copyright 1986-2008 by The University of Washington. Written by Joseph Felsenstein. Permission is granted to copy this document provided that no fee is charged for it and that this copyright notice is not removed.

格式支持

有嗅探员:是的

读者

writer

对象类

是的

是的

skbio.alignment.TabularMSA

格式规范

PHYLIP格式是一种纯文本格式,只包含两个部分:一个标题描述对齐的维度,后跟多序列对齐本身。

这里描述的格式是“strict”PHYLIP,如中所述 [4]. 严格PHYLIP要求每个序列标识符正好10个字符长(必要时用空格填充)。其他生物信息学工具(如RAxML)可以放宽这一规则,以允许更长的序列标识符。见 定线断面 详情请参见下文。

这里描述的格式是“顺序”格式。原始PHYLIP格式规范 [3] 描述顺序格式和交错格式。

备注

scikit-bio目前支持读写严格的、顺序的PHYLIP格式的文件。不支持松弛和/或交错PHYLIP格式。

收割台部分

页眉由描述路线尺寸的单行组成。它 must 成为文件的第一行。头由可选空格组成,后跟两个正整数 (nm )用一个或多个空格隔开。第一个整数 (n )指定路线中的序列数(即行数)。第二个整数 (m )指定对齐中序列的长度(即列数)。最小支撑线形尺寸为1x1。

备注

scikit-bio将写入PHYLIP格式头 没有 前面只有一个空格 nm .

PHYLIP格式 支持收割台和对齐之间的空白行。

定线断面

对齐部分紧跟在收割台之后。它包括 n 线(行),路线中的每个序列一个。每行由序列标识符(ID)和序列中的字符组成,格式固定。

序列ID最多可包含10个字符。少于10个字符的ID必须附加空格才能达到10个字符的固定宽度。在一个ID中,除换行符外,支持所有字符,包括空格、下划线和数字。

备注

将PHYLIP格式的文件读入 skbio.alignment.TabularMSA 对象,序列标识符/标签存储为 TabularMSA 索引标签 (index 属性)。

在编写 skbio.alignment.TabularMSA 对象作为PHYLIP格式的文件, TabularMSA 索引标签将转换为字符串,并作为序列标识符/标签写入。

scikit-bio支持空字符串 ('' )作为有效的序列ID。写入时,空的ID将填充10个空格。

序列字符紧跟在序列ID之后 must 从行中的第11个字符开始,因为前10个字符是为序列ID保留的。虽然PHYLIP格式没有明确限制可用于表示序列的支持字符集,但原始格式描述 [3] 为DNA或RNA序列指定IUPAC核酸词典,为蛋白质序列指定IUPAC蛋白质词典。最初的PHYLIP规范使用 - 虽然旧版本也支持 . . 序列字符可以包含可选空格(例如,为了提高可读性),并且支持大写和小写字符。

备注

只要对齐的序列字符对于读入或写入的内存序列对象的类型有效,scikit bio将读/写PHYLIP格式的文件。这与PHYLIP规范不同,PHYLIP规范规定PHYLIP格式的文件只能包含有效的IUPAC字符。见 constructor 有关详细信息,请参阅下面的格式参数。

因为scikit-bio支持两者 - and . 作为空白字符(例如 DNARNAProtein sequence对象),在读/写PHYLIP格式的文件时,两者都受支持。

在编写PHYLIP格式的文件时,scikit-bio会将每个序列分成10个字符长的块。每个块将被一个空格隔开。序列将始终显示在单行上(顺序格式)。会的 not 被多行环绕。序列以这种方式分块以提高可读性,而且因为大多数示例PHYLIP文件都是以类似的方式分块的(例如,请参阅上面的示例文件)。注意,读取PHYLIP格式的文件时不需要这种分块,PHYLIP格式规范本身也不需要。

格式参数

唯一支持的格式参数是 constructor ,指定要将每个对齐序列读入的内存序列对象的类型。这必须是 GrammaredSequence (例如, DNARNAProtein )是必需的格式参数。例如,如果您知道正在读取的PHYLIP文件包含DNA序列,则可以通过 constructor=DNA 给读者打电话。

示例

让我们创建一个 TabularMSA 有三个DNA序列:

>>> from skbio import TabularMSA, DNA
>>> seqs = [DNA('ACCGTTGTA-GTAGCT', metadata={'id':'seq1'}),
...         DNA('A--GTCGAA-GTACCT', metadata={'id':'sequence-2'}),
...         DNA('AGAGTTGAAGGTATCT', metadata={'id':'3'})]
>>> msa = TabularMSA(seqs, minter='id')
>>> msa
TabularMSA[DNA]
----------------------
Stats:
    sequence count: 3
    position count: 16
----------------------
ACCGTTGTA-GTAGCT
A--GTCGAA-GTACCT
AGAGTTGAAGGTATCT
>>> msa.index
Index(['seq1', 'sequence-2', '3'], dtype='object')

现在让我们写 TabularMSA 要以PHYLIP格式归档并查看输出,请执行以下操作:

>>> from io import StringIO
>>> fh = StringIO()
>>> print(msa.write(fh, format='phylip').getvalue())
3 16
seq1      ACCGTTGTA- GTAGCT
sequence-2A--GTCGAA- GTACCT
3         AGAGTTGAAG GTATCT

>>> fh.close()

请注意,16个字符的序列被分成两个块,每个序列都显示在一行上(顺序格式)。还要注意,为了生成一个固定宽度的列,每个序列ID都用空格填充到10个字符。

如果 TabularMSA 超过10个字符的限制,写入时会出错:

>>> msa.index = ['seq1', 'long-sequence-2', 'seq3']
>>> fh = StringIO()
>>> msa.write(fh, format='phylip')
Traceback (most recent call last):
    ...
skbio.io._exception.PhylipFormatError: ``TabularMSA`` can only be written in PHYLIP format if all sequence index labels have 10 or fewer characters. Found sequence with index label 'long-sequence-2' that exceeds this limit. Use ``TabularMSA.reassign_index`` to assign shorter index labels.
>>> fh.close()

解决此问题的一种方法是指定较短的索引标签。建议的方法是通过 TabularMSA.reassign_index . 例如,要重新分配默认整数索引标签,请执行以下操作:

>>> msa.reassign_index()
>>> msa.index
RangeIndex(start=0, stop=3, step=1)

我们现在可以写 TabularMSA PHYLIP格式:

>>> fh = StringIO()
>>> print(msa.write(fh, format='phylip').getvalue())
3 16
0         ACCGTTGTA- GTAGCT
1         A--GTCGAA- GTACCT
2         AGAGTTGAAG GTATCT

>>> fh.close()

引用