在 GitHub 上編輯此頁面

SeqRecord 類別簡介。

此頁面描述 Biopython 中使用的 SeqRecord 物件,用於保存具有識別符(ID 和名稱)、描述以及可選的註釋和子特徵的序列(作為 Seq 物件)。

BioPython 中的大多數序列檔案格式解析器可以返回 SeqRecord 物件(並且也可能提供特定格式的記錄物件,例如 Bio.SwissProt)。SeqIO 系統只會返回 SeqRecord 物件。

除了 SeqRecord 物件的 API 文件之外,教學PDF)中還有完整章節,並且 SeqIO 頁面也非常相關。

從 SeqRecord 中提取資訊

讓我們詳細查看 Biopython 從 GenBank 檔案建立的良好註釋 SeqRecord 物件,例如 ls_orchid.gbk,我們將使用 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 中另一個重要的物件類型,值得在 wiki 文件中擁有自己的頁面。

以下三個屬性都是簡單的字串

>>> 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 物件足夠複雜,值得擁有自己的 wiki 頁面…目前請參考教學。

如果您使用的是 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(...) 以將其儲存到磁碟。