此頁面描述 Biopython 中使用的 SeqRecord
物件,用於保存具有識別符(ID 和名稱)、描述以及可選的註釋和子特徵的序列(作為 Seq
物件)。
BioPython 中的大多數序列檔案格式解析器可以返回 SeqRecord
物件(並且也可能提供特定格式的記錄物件,例如 Bio.SwissProt
)。SeqIO
系統只會返回 SeqRecord
物件。
除了 SeqRecord
物件的 API 文件之外,教學(PDF)中還有完整章節,並且 SeqIO
頁面也非常相關。
讓我們詳細查看 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)對齊檔案也經常包含逐字母註釋。
大多數時候,您會通過使用 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(...)
以將其儲存到磁碟。