在 GitHub 上编辑此页面

SeqRecord 类介绍。

本页面描述了 Biopython 中用于保存序列(作为 Seq 对象)以及标识符(ID 和名称)、描述以及可选的注释和子特征的 SeqRecord 对象。

Biopython 中大多数序列文件格式解析器可以返回 SeqRecord 对象(并可能提供特定于格式的记录对象,例如 Bio.SwissProt)。SeqIO 系统将 *只* 返回 SeqRecord 对象。

除了 SeqRecord 对象的 API 文档 之外,在 教程 (PDF) 中还有一个完整的章节,并且 SeqIO 页面 也非常相关。

从 SeqRecord 中提取信息

让我们详细了解一下 Biopython 从 GenBank 文件(例如 ls_orchid.gbk)创建的良好注释的 SeqRecord 对象,我们将使用 SeqIO 模块加载它。该文件包含 94 条记录

from Bio import SeqIO

for index, record in enumerate(SeqIO.parse("ls_orchid.gbk", "genbank")):
    print(
        "index %i, ID = %s, length %i, with %i features"
        % (index, record.id, len(record.seq), len(record.features))
    )

这是其中一些输出。请记住,Python 喜欢从零开始计数,因此此文件中的 94 条记录已标记为 0 到 93

index 0, ID = Z78533.1, length 740, with 5 features
index 1, ID = Z78532.1, length 753, with 5 features
index 2, ID = Z78531.1, length 748, with 5 features
...
index 92, ID = Z78440.1, length 744, with 5 features
index 93, ID = Z78439.1, length 592, with 5 features

让我们更详细地看一下最后一条记录

>>> print(record)

这应该会让你了解此对象中保存的信息类型

ID: Z78439.1
Name: Z78439
Description: P.barbatum 5.8S rRNA gene and ITS1 and ITS2 DNA
Number of features: 5
/molecule_type=DNA
/topology=linear
/data_file_division=PLN
/date=30-NOV-2006
/accessions=['Z78439']
/sequence_version=1
/gi=2765564
/keywords=['5.8S ribosomal RNA', '5.8S rRNA gene', 'internal transcribed spacer', 'ITS1', 'ITS2']
/source=Paphiopedilum barbatum
/organism=Paphiopedilum barbatum
/taxonomy=['Eukaryota', 'Viridiplantae', 'Streptophyta', ..., 'Paphiopedilum']
/references=[Reference(title='Phylogenetics of the slipper orchids (Cypripedioideae: Orchidaceae): nuclear rDNA ITS sequences', ...), Reference(title='Direct Submission', ...)]
Seq('CATTGTTGAGATCACATAATAATTGATCGAGTTAATCTGGAGGATCTGTTTACT...GCC')

让我们更仔细地看一下……并使用 Python 的 dir() 函数来了解更多关于 SeqRecord 对象及其功能的信息

>>> dir(record)
[..., 'annotations', 'dbxrefs', 'description', 'features', 'format', 'id', 'letter_annotations', 'name', 'seq']

如果你不知道,dir() 函数会返回一个对象的所有方法和属性列表(作为字符串)。那些以下划线开头的名称是“特殊的”,我们将在本次讨论中忽略它们。我们将从 .seq 属性开始

>>> record.seq
Seq('CATTGTTGAGATCACATAATAATTGATCGAGTTAATCTGGAGGATCTGTTTACT...GCC')
>>> type(record.seq)
<class 'Bio.Seq.Seq'>

这是一个 Seq 对象,它是 Biopython 中另一个重要的对象类型,并且值得在维基文档中拥有自己的页面。

以下三个属性都是简单的字符串

>>> print(record.id)
Z78439.1
>>> print(record.name)
Z78439
>>> print(record.description)
P.barbatum 5.8S rRNA gene and ITS1 and ITS2 DNA.

查看原始 GenBank 文件,看看它们来自哪里。

接下来,我们将检查 .dxrefs 属性,它保存任何数据库交叉引用

>>> print(record.dbxrefs)
[]
>>> type(record.dbxrefs)
<type 'list'>

空列表?令人失望……如果我们使用更近期的 GenBank 文件,基因组测序项目参考将显示在此处。

那么 .annotations 属性呢?这是一个 Python 字典……

>>> print(record.annotations)
{'sequence_version: 1, 'source': 'Paphiopedilum barbatum', 'taxonomy': ...}
>>> type(record.annotations)
<type 'dict'>
>>> print(record.annotations["source"])
Paphiopedilum barbatum

在这种情况下,字典中的大多数值都是简单的字符串,但并非总是如此 - 请查看此示例的引用条目 - 它是一个包含 Reference 对象的列表

>>> type(record.annotations["references"])
<type 'list'>
>>> print(len(record.annotations["references"]))
2
>>> for ref in record.annotations["references"]:
        print(ref.authors)

Cox,A.V., Pridgeon,A.M., Albert,V.A. and Chase,M.W.
Cox,A.V.

接下来是 .features,它是另一个列表属性,它包含 SeqFeature 对象

>>> type(record.features)
<type 'list'>
>>> print(len(record.features))
5

SeqFeature 对象足够复杂,需要拥有自己的维基页面……现在请参考教程。

如果您使用的是 Biopython 1.48 或更高版本,将有一个 .format() 方法。这使您可以使用 Bio.SeqIO 支持的输出格式之一将 SeqRecord 转换为字符串,例如

>>> print(record.format("fasta"))

这应该会显示

>Z78439.1 P.barbatum 5.8S rRNA gene and ITS1 and ITS2 DNA.
CATTGTTGAGATCACATAATAATTGATCGAGTTAATCTGGAGGATCTGTTTACTTTGGTC
ACCCATGGGCATTTGCTGTTGAAGTGACCTAGATTTGCCATCGAGCCTCCTTGGGAGCTT
TCTTGTTGGCGAGATCTAAACCCCTGCCCGGCGGAGTTGGGCGCCAAGTCATATGACACA
TAATTGGTGAAGGGGGTGGTAATCCTGCCCTGACCCTCCCCAAATTATTTTTTTAACAAC
TCTCAGCAACGGATATCTCGGCTCTTGCATCGATGAAGAACGCAGCGAAATGCGATAATG
GTGTGAATTGCAGAATCCCGTGAACATCGAGTCTTTGAACGCAAGTTGCGCCCGAGGCCA
TCAGGCCAAGGGCACGCCTGCCTGGGCATTGCGAGTCATATCTCTCCCTTAATGAGGCTG
TCCATACATACTGTTCAGCCGGTGCGGATGTGAGTTTGGCCCCTTGTTCTTTGGTACGGG
GGGTCTAAGAGCTGCATGGGCTTTGGATGGTCCTAAATACGGAAAGAGGTGGACGAACTA
TGCTACAACAAAATTGTTGTGCAAATGCCCCGGTTGGCCGTTTAGTTGGGCC

如果您使用的是 Biopython 1.50 或更高版本,还会有一个 .letter_annotations 属性。同样,这是一个字典,但用于每个字母注释,例如序列质量得分或二级结构预测。这种信息在 GenBank 文件中找不到,因此在这种情况下,字典为空

>>> print(record.letter_annotations)
{}

查看 FASTQ 或 QUAL 文件,了解质量得分是如何表示的。斯德哥尔摩 (PFAM) 比对文件通常也包含每个字母注释。

创建 SeqRecord 对象

大多数时候,您将通过使用 Bio.SeqIO 解析序列文件来创建 SeqRecord 对象。但是,了解如何直接创建 SeqRecord 非常有用。例如,

from Bio.Seq import Seq
from Bio.SeqRecord import SeqRecord

record = SeqRecord(
    Seq("MKQHKAMIVALIVICITAVVAALVTRKDLCEVHIRTGQTEVAVF"),
    id="YP_025292.1",
    name="HokC",
    description="toxic membrane protein, small",
)
print(record)

这将给出以下输出

ID: YP_025292.1
Name: HokC
Description: toxic membrane protein, small
Number of features: 0
Seq('MKQHKAMIVALIVICITAVVAALVTRKDLCEVHIRTGQTEVAVF')

然后,您可以将此新记录传递给 Bio.SeqIO.write(...) 以将其保存到磁盘。