Bio.SeqRecord 模組
表示一個序列記錄,一個帶有註釋的序列。
- class Bio.SeqRecord.SeqRecord(seq: Seq | MutableSeq | None, id: str | None = '<unknown id>', name: str = '<unknown name>', description: str = '<unknown description>', dbxrefs: list[str] | None = None, features: list[SeqFeature] | None = None, annotations: dict[str, str | int] | None = None, letter_annotations: dict[str, Sequence[Any]] | None = None)
基底類別:
object
SeqRecord 物件保存一個序列及其相關資訊。
- 主要屬性
id - 識別符,例如基因座標籤 (字串)
seq - 序列本身 (Seq 物件或類似物件)
- 額外屬性
name - 序列名稱,例如基因名稱 (字串)
description - 額外文字 (字串)
dbxrefs - 資料庫交叉參考清單 (字串清單)
features - 定義的任何 (子) 特徵 (SeqFeature 物件清單)
annotations - 關於整個序列的進一步資訊 (字典)。大多數條目是字串或字串清單。
letter_annotations - 每個字母/符號的註釋 (受限字典)。這保存長度與序列長度匹配的 Python 序列 (清單、字串或元組)。一個典型的用途是保存代表定序品質分數的整數列表,或代表二級結構的字串。
您通常會使用 Bio.SeqIO 從檔案中讀取序列作為 SeqRecord 物件。但是,您可能需要直接建立自己的 SeqRecord 物件 (請參閱 __init__ 方法以了解更多詳細資訊)
>>> from Bio.Seq import Seq >>> from Bio.SeqRecord import SeqRecord >>> record = SeqRecord(Seq("MKQHKAMIVALIVICITAVVAALVTRKDLCEVHIRTGQTEVAVF"), ... id="YP_025292.1", name="HokC", ... description="toxic membrane protein") >>> print(record) ID: YP_025292.1 Name: HokC Description: toxic membrane protein Number of features: 0 Seq('MKQHKAMIVALIVICITAVVAALVTRKDLCEVHIRTGQTEVAVF')
如果要將 SeqRecord 物件儲存到序列檔案中,請使用 Bio.SeqIO。對於您想要將 SeqRecord 轉換為特定檔案格式字串的特殊情況,有一個在內部使用 Bio.SeqIO 的 format 方法
>>> print(record.format("fasta")) >YP_025292.1 toxic membrane protein MKQHKAMIVALIVICITAVVAALVTRKDLCEVHIRTGQTEVAVF
您還可以執行諸如切片 SeqRecord、檢查其長度等操作
>>> len(record) 44 >>> edited = record[:10] + record[11:] >>> print(edited.seq) MKQHKAMIVAIVICITAVVAALVTRKDLCEVHIRTGQTEVAVF >>> print(record.seq) MKQHKAMIVALIVICITAVVAALVTRKDLCEVHIRTGQTEVAVF
- __init__(seq: Seq | MutableSeq | None, id: str | None = '<unknown id>', name: str = '<unknown name>', description: str = '<unknown description>', dbxrefs: list[str] | None = None, features: list[SeqFeature] | None = None, annotations: dict[str, str | int] | None = None, letter_annotations: dict[str, Sequence[Any]] | None = None) None
建立一個 SeqRecord。
- 參數
seq - 序列,必要 (Seq 或 MutableSeq)
id - 序列識別符,建議 (字串)
name - 序列名稱,可選 (字串)
description - 序列描述,可選 (字串)
dbxrefs - 資料庫交叉參考,可選 (字串清單)
features - 任何 (子) 特徵,可選 (SeqFeature 物件清單)
annotations - 整個序列的註釋字典
letter_annotations - 每個字母的註釋字典,值應為與完整序列長度相同的字串、清單或元組。
您通常會使用 Bio.SeqIO 從檔案中讀取序列作為 SeqRecord 物件。但是,您可能需要直接建立自己的 SeqRecord 物件。
請注意,雖然 id 是可選的,但我們強烈建議您為每個記錄提供唯一的 id 字串。如果您希望將序列寫入檔案,這尤其重要。
您可以建立一個「空白」的 SeqRecord 物件,然後稍後填入屬性。
- dbxrefs: list[str]
- annotations: dict[str, str | int]
- property letter_annotations
序列的每個字母註釋字典。
例如,這可以保存 FASTQ 或 QUAL 檔案中使用的品質分數。考慮這個使用 Bio.SeqIO 讀取範例 Solexa 變體 FASTQ 檔案作為 SeqRecord 的範例
>>> from Bio import SeqIO >>> record = SeqIO.read("Quality/solexa_faked.fastq", "fastq-solexa") >>> print("%s %s" % (record.id, record.seq)) slxa_0001_1_0001_01 ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTNNNNNN >>> print(list(record.letter_annotations)) ['solexa_quality'] >>> print(record.letter_annotations["solexa_quality"]) [40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5]
如果切片父 SeqRecord,則 letter_annotations 會自動切片,例如取最後十個鹼基
>>> sub_record = record[-10:] >>> print("%s %s" % (sub_record.id, sub_record.seq)) slxa_0001_1_0001_01 ACGTNNNNNN >>> print(sub_record.letter_annotations["solexa_quality"]) [4, 3, 2, 1, 0, -1, -2, -3, -4, -5]
只要長度與 SeqRecord 的序列長度相符,任何 python 序列 (即列表、元組或字串) 都可以記錄在 SeqRecord 的 letter_annotations 字典中。 例如:
>>> len(sub_record.letter_annotations) 1 >>> sub_record.letter_annotations["dummy"] = "abcdefghij" >>> len(sub_record.letter_annotations) 2
您可以像平常一樣從 letter_annotations 字典中刪除條目
>>> del sub_record.letter_annotations["solexa_quality"] >>> sub_record.letter_annotations {'dummy': 'abcdefghij'}
您可以輕鬆地完全清除字典,如下所示
>>> sub_record.letter_annotations = {} >>> sub_record.letter_annotations {}
請注意,如果將記錄的序列替換為不同長度的序列,您必須先清除 letter_annotations 字典。
- property seq
序列本身,以 Seq 或 MutableSeq 物件表示。
- __getitem__(index: int) str
- __getitem__(index: slice) SeqRecord
回傳子序列或單個字母。
切片操作,例如 `my_record[5:10]`,會回傳一個新的 SeqRecord,其中包含該子序列,並保留一些註釋,如下所示:
名稱、ID 和描述會保持不變。
任何逐字母的註釋都會被切片以符合請求的子序列。
除非使用步幅,否則所有完全落在子序列內的特徵都會被包含進來(它們的位置也會相應調整)。如果您想要保留任何被截斷的特徵(例如 GenBank/EMBL 來源特徵),您必須明確地將它們添加到新的 SeqRecord 中。
除了任何分子類型外,新的 SeqRecord 不會使用註釋字典和 dbxrefs 清單,因為它們通常可能不適用於子序列。如果您想要保留它們,您必須明確地將它們複製到新的 SeqRecord 中。
使用整數索引,例如 `my_record[5]`,是從序列中提取該字母的簡寫,等同於 `my_record.seq[5]`。
例如,考慮這個短蛋白及其二級結構,以 PDB 編碼(例如,H 代表 alpha 螺旋),以及一個簡單的組胺酸自磷酸化位點特徵
>>> from Bio.Seq import Seq >>> from Bio.SeqRecord import SeqRecord >>> from Bio.SeqFeature import SeqFeature, SimpleLocation >>> rec = SeqRecord(Seq("MAAGVKQLADDRTLLMAGVSHDLRTPLTRIRLAT" ... "EMMSEQDGYLAESINKDIEECNAIIEQFIDYLR"), ... id="1JOY", name="EnvZ", ... description="Homodimeric domain of EnvZ from E. coli") >>> rec.letter_annotations["secondary_structure"] = " S SSSSSSHHHHHTTTHHHHHHHHHHHHHHHHHHHHHHTHHHHHHHHHHHHHHHHHHHHHTT " >>> rec.features.append(SeqFeature(SimpleLocation(20, 21), ... type = "Site"))
現在讓我們快速看一下完整記錄,
>>> print(rec) ID: 1JOY Name: EnvZ Description: Homodimeric domain of EnvZ from E. coli Number of features: 1 Per letter annotation for: secondary_structure Seq('MAAGVKQLADDRTLLMAGVSHDLRTPLTRIRLATEMMSEQDGYLAESINKDIEE...YLR') >>> rec.letter_annotations["secondary_structure"] ' S SSSSSSHHHHHTTTHHHHHHHHHHHHHHHHHHHHHHTHHHHHHHHHHHHHHHHHHHHHTT ' >>> print(rec.features[0].location) [20:21]
現在讓我們取一個子序列,這裡選擇的是第一個(斷裂的)alpha 螺旋,其中包含組胺酸磷酸化位點
>>> sub = rec[11:41] >>> print(sub) ID: 1JOY Name: EnvZ Description: Homodimeric domain of EnvZ from E. coli Number of features: 1 Per letter annotation for: secondary_structure Seq('RTLLMAGVSHDLRTPLTRIRLATEMMSEQD') >>> sub.letter_annotations["secondary_structure"] 'HHHHHTTTHHHHHHHHHHHHHHHHHHHHHH' >>> print(sub.features[0].location) [9:10]
當然,您也可以省略開始或結束值,例如只取得前十個字母
>>> print(rec[:10]) ID: 1JOY Name: EnvZ Description: Homodimeric domain of EnvZ from E. coli Number of features: 0 Per letter annotation for: secondary_structure Seq('MAAGVKQLAD')
或是取得最後十個字母
>>> print(rec[-10:]) ID: 1JOY Name: EnvZ Description: Homodimeric domain of EnvZ from E. coli Number of features: 0 Per letter annotation for: secondary_structure Seq('IIEQFIDYLR')
如果兩者都省略,那麼您會得到原始記錄的副本(儘管缺少註釋和 dbxrefs)
>>> print(rec[:]) ID: 1JOY Name: EnvZ Description: Homodimeric domain of EnvZ from E. coli Number of features: 1 Per letter annotation for: secondary_structure Seq('MAAGVKQLADDRTLLMAGVSHDLRTPLTRIRLATEMMSEQDGYLAESINKDIEE...YLR')
最後,使用簡單的整數索引是直接從序列中提取該字母的簡寫
>>> rec[5] 'K' >>> rec.seq[5] 'K'
- __iter__() Iterable[Seq | MutableSeq]
迭代序列中的字母。
例如,使用 Bio.SeqIO 讀取蛋白質 FASTA 檔案
>>> from Bio import SeqIO >>> record = SeqIO.read("Fasta/loveliesbleeding.pro", "fasta") >>> for amino in record: ... print(amino) ... if amino == "L": break X A G L >>> print(record.seq[3]) L
這只是直接迭代序列的快捷方式
>>> for amino in record.seq: ... print(amino) ... if amino == "L": break X A G L >>> print(record.seq[3]) L
請注意,這不會方便與任何逐字母註釋一起迭代。但是,您可以使用 python zip 函數在記錄(或其序列)和相關的逐字母註釋上實現
>>> from Bio import SeqIO >>> rec = SeqIO.read("Quality/solexa_faked.fastq", "fastq-solexa") >>> print("%s %s" % (rec.id, rec.seq)) slxa_0001_1_0001_01 ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTNNNNNN >>> print(list(rec.letter_annotations)) ['solexa_quality'] >>> for nuc, qual in zip(rec, rec.letter_annotations["solexa_quality"]): ... if qual > 35: ... print("%s %i" % (nuc, qual)) A 40 C 39 G 38 T 37 A 36
您可能會同意使用 `zip(rec.seq, ...)` 比使用上面顯示的 `zip(rec, ...)` 更明確。
- __contains__(char: str) bool
實作「in」關鍵字,搜尋序列。
例如:
>>> from Bio import SeqIO >>> record = SeqIO.read("Fasta/sweetpea.nu", "fasta") >>> "GAATTC" in record False >>> "AAA" in record True
這實質上充當對序列使用「in」的代理
>>> "GAATTC" in record.seq False >>> "AAA" in record.seq True
請注意,您也可以使用 Seq 物件作為查詢:
>>> from Bio.Seq import Seq >>> Seq("AAA") in record True
另請參閱 Seq 物件的 `__contains__` 方法。
- __bytes__() bytes
- __str__() str
回傳記錄及其註釋的人類可讀摘要(字串)。
python 內建函數 str 會透過呼叫物件的 `__str__` 方法來運作。例如:
>>> 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(str(record)) ID: YP_025292.1 Name: HokC Description: toxic membrane protein, small Number of features: 0 Seq('MKQHKAMIVALIVICITAVVAALVTRKDLCEVHIRTGQTEVAVF')
在這個例子中,您實際上不需要明確呼叫 str,因為 print 命令會自動執行此操作
>>> print(record) ID: YP_025292.1 Name: HokC Description: toxic membrane protein, small Number of features: 0 Seq('MKQHKAMIVALIVICITAVVAALVTRKDLCEVHIRTGQTEVAVF')
請注意,長序列會被截斷顯示。
- __repr__() str
回傳記錄的簡潔摘要以進行除錯(字串)。
python 內建函數 repr 會透過呼叫物件的 `__repr__` 方法來運作。例如:
>>> from Bio.Seq import Seq >>> from Bio.SeqRecord import SeqRecord >>> rec = SeqRecord(Seq("MASRGVNKVILVGNLGQDPEVRYMPNGGAVANITLATSESWRDKAT" ... "GEMKEQTEWHRVVLFGKLAEVASEYLRKGSQVYIEGQLRTRKWTDQ" ... "SGQDRYTTEVVVNVGGTMQMLGGRQGGGAPAGGNIGGGQPQGGWGQ" ... "PQQPQGGNQFSGGAQSRPQQSAPAAPSNEPPMDFDDDIPF"), ... id="NP_418483.1", name="b4059", ... description="ssDNA-binding protein", ... dbxrefs=["ASAP:13298", "GI:16131885", "GeneID:948570"]) >>> print(repr(rec)) SeqRecord(seq=Seq('MASRGVNKVILVGNLGQDPEVRYMPNGGAVANITLATSESWRDKATGEMKEQTE...IPF'), id='NP_418483.1', name='b4059', description='ssDNA-binding protein', dbxrefs=['ASAP:13298', 'GI:16131885', 'GeneID:948570'])
在 python 提示符號下,您也可以使用這個簡寫
>>> rec SeqRecord(seq=Seq('MASRGVNKVILVGNLGQDPEVRYMPNGGAVANITLATSESWRDKATGEMKEQTE...IPF'), id='NP_418483.1', name='b4059', description='ssDNA-binding protein', dbxrefs=['ASAP:13298', 'GI:16131885', 'GeneID:948570'])
請注意,長序列會被截斷顯示。另請注意,任何註釋、letter_annotations 和特徵都不會顯示(因為它們會導致非常長的字串)。
- format(format: str) str
以指定的文件格式回傳記錄的字串。
格式應為 Bio.SeqIO 作為輸出格式支援的小寫字串,它用於將 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") >>> record.format("fasta") '>YP_025292.1 toxic membrane protein\nMKQHKAMIVALIVICITAVVAALVTRKDLCEVHIRTGQTEVAVF\n' >>> print(record.format("fasta")) >YP_025292.1 toxic membrane protein MKQHKAMIVALIVICITAVVAALVTRKDLCEVHIRTGQTEVAVF
Python 的 print 函數會自動附加一個新行,這表示在這個例子中會顯示一個空白行。如果您查看字串表示法,您可以看到有一個尾隨新行(顯示為斜線 n),這在寫入檔案或將多個序列字串串聯在一起時非常重要。
請注意,此方法不適用於 Bio.SeqIO 支援的每種可能的文件格式(例如,有些僅適用於多個序列,並且不支援二進位格式)。
- __format__(format_spec: str) str
以指定的文件格式回傳記錄的字串。
此方法支援 Python 的 format() 函數和 f-strings。 format_spec 應為 Bio.SeqIO 作為文字輸出檔案格式支援的小寫字串。請求二進位檔案格式會引發 ValueError。例如:
>>> from Bio.Seq import Seq >>> from Bio.SeqRecord import SeqRecord >>> record = SeqRecord(Seq("MKQHKAMIVALIVICITAVVAALVTRKDLCEVHIRTGQTEVAVF"), ... id="YP_025292.1", name="HokC", ... description="toxic membrane protein") ... >>> format(record, "fasta") '>YP_025292.1 toxic membrane protein\nMKQHKAMIVALIVICITAVVAALVTRKDLCEVHIRTGQTEVAVF\n' >>> print(f"Here is {record.id} in FASTA format:\n{record:fasta}") Here is YP_025292.1 in FASTA format: >YP_025292.1 toxic membrane protein MKQHKAMIVALIVICITAVVAALVTRKDLCEVHIRTGQTEVAVF
另請參閱 SeqRecord 的 format() 方法。
- __len__() int
回傳序列的長度。
例如,使用 Bio.SeqIO 讀取 FASTA 核苷酸檔案
>>> from Bio import SeqIO >>> record = SeqIO.read("Fasta/sweetpea.nu", "fasta") >>> len(record) 309 >>> len(record.seq) 309
- __lt__(other: Any) NoReturn
定義小於運算子(未實作)。
- __le__(other: Any) NoReturn
定義小於或等於運算子(未實作)。
- __eq__(other: object) NoReturn
定義等於運算子(未實作)。
- __ne__(other: object) NoReturn
定義不等於運算子(未實作)。
- __gt__(other: Any) NoReturn
定義大於運算子(未實作)。
- __ge__(other: Any) NoReturn
定義大於或等於運算子(未實作)。
- __bool__() bool
此類別實例的布林值 (True)。
此行為是為了向後相容性,因為在加入 `__len__` 方法之前,SeqRecord 總是評估為 True。
請注意,相比之下,如果 Seq 物件的序列長度為零,則會評估為 False。
警告:為了更好地符合 Seq 物件的行為,SeqRecord 未來可能會在其序列長度為零時評估為 False!
- __add__(other: SeqRecord | Seq | MutableSeq | str) SeqRecord
將另一個序列或字串加到此序列。
另一個序列可以是 SeqRecord 物件、Seq 物件(或類似的,例如 MutableSeq)或一般的 Python 字串。如果您加入一般的字串或 Seq(類似)物件,新的 SeqRecord 將僅會把此字串附加到現有的資料。然而,任何逐字母的註釋都將遺失。
>>> from Bio import SeqIO >>> record = SeqIO.read("Quality/solexa_faked.fastq", "fastq-solexa") >>> print("%s %s" % (record.id, record.seq)) slxa_0001_1_0001_01 ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTNNNNNN >>> print(list(record.letter_annotations)) ['solexa_quality']
>>> new = record + "ACT" >>> print("%s %s" % (new.id, new.seq)) slxa_0001_1_0001_01 ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTNNNNNNACT >>> print(list(new.letter_annotations)) []
新的記錄將嘗試合併註釋,但對於任何模糊之處(例如,不同的名稱),它預設會省略該註釋。
>>> from Bio import SeqIO >>> with open("GenBank/pBAD30.gb") as handle: ... plasmid = SeqIO.read(handle, "gb") >>> print("%s %i" % (plasmid.id, len(plasmid))) pBAD30 4923
現在,讓我們將質體切割成兩塊,然後將它們以相反的方式重新接合(也就是說,移動此質體的起始點,查看原始檔案中的註釋功能,了解為什麼這個特定的分割點可能會有意義)
>>> left = plasmid[:3765] >>> right = plasmid[3765:] >>> new = right + left >>> print("%s %i" % (new.id, len(new))) pBAD30 4923 >>> str(new.seq) == str(right.seq + left.seq) True >>> len(new.features) == len(left.features) + len(right.features) True
當我們加入左側和右側的 SeqRecord 物件時,它們的註釋都是一致的,因此所有內容都保留在新 SeqRecord 中。
>>> new.id == left.id == right.id == plasmid.id True >>> new.name == left.name == right.name == plasmid.name True >>> new.description == plasmid.description True >>> new.annotations == left.annotations == right.annotations True >>> new.letter_annotations == plasmid.letter_annotations True >>> new.dbxrefs == left.dbxrefs == right.dbxrefs True
然而,我們應該指出,當我們切分 SeqRecord 時,任何 annotations 字典或 dbxrefs 清單中的條目都會遺失。您可以像這樣明確複製它們
>>> new.annotations = plasmid.annotations.copy() >>> new.dbxrefs = plasmid.dbxrefs[:]
- __radd__(other: Seq | MutableSeq | str) SeqRecord
將另一個序列或字串加到此序列(從左側)。
此方法處理將 Seq 物件(或類似的,例如 MutableSeq)或一般的 Python 字串(在左側)加入到 SeqRecord(在右側)。請參閱 __add__ 方法以取得更多詳細資訊,例如
>>> from Bio import SeqIO >>> record = SeqIO.read("Quality/solexa_faked.fastq", "fastq-solexa") >>> print("%s %s" % (record.id, record.seq)) slxa_0001_1_0001_01 ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTNNNNNN >>> print(list(record.letter_annotations)) ['solexa_quality']
>>> new = "ACT" + record >>> print("%s %s" % (new.id, new.seq)) slxa_0001_1_0001_01 ACTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTNNNNNN >>> print(list(new.letter_annotations)) []
- count(sub, start=None, end=None)
傳回 seq[start:end] 中 sub 的非重疊出現次數。
可選的引數 start 和 end 的解讀方式與切片表示法相同。此方法的行為與 Python 字串的 count 方法相同。
- upper() SeqRecord
傳回序列為大寫的記錄副本。
所有註釋都會保持不變。例如:
>>> from Bio.Seq import Seq >>> from Bio.SeqRecord import SeqRecord >>> record = SeqRecord(Seq("acgtACGT"), id="Test", ... description = "Made up for this example") >>> record.letter_annotations["phred_quality"] = [1, 2, 3, 4, 5, 6, 7, 8] >>> print(record.upper().format("fastq")) @Test Made up for this example ACGTACGT + "#$%&'()
當然,還有一個對應的 lower 方法
>>> print(record.lower().format("fastq")) @Test Made up for this example acgtacgt + "#$%&'()
- __annotations__ = {'_per_letter_annotations': '_RestrictedDict', 'annotations': dict[str, typing.Union[str, int]], 'dbxrefs': list[str]}
- __hash__ = None
- lower() SeqRecord
傳回序列為小寫的記錄副本。
所有註釋都會保持不變。例如:
>>> from Bio import SeqIO >>> record = SeqIO.read("Fasta/aster.pro", "fasta") >>> print(record.format("fasta")) >gi|3298468|dbj|BAA31520.1| SAMIPF GGHVNPAVTFGAFVGGNITLLRGIVYIIAQLLGSTVACLLLKFVTNDMAVGVFSLSAGVG VTNALVFEIVMTFGLVYTVYATAIDPKKGSLGTIAPIAIGFIVGANI >>> print(record.lower().format("fasta")) >gi|3298468|dbj|BAA31520.1| SAMIPF gghvnpavtfgafvggnitllrgivyiiaqllgstvaclllkfvtndmavgvfslsagvg vtnalvfeivmtfglvytvyataidpkkgslgtiapiaigfivgani
為了提供更豐富的註釋範例,
>>> from Bio import SeqIO >>> old = SeqIO.read("EMBL/TRBG361.embl", "embl") >>> len(old.features) 3 >>> new = old.lower() >>> len(old.features) == len(new.features) True >>> old.annotations["organism"] == new.annotations["organism"] True >>> old.dbxrefs == new.dbxrefs True
- isupper()
如果記錄序列中的所有 ASCII 字元都是大寫,則傳回 True。
如果沒有大小寫字元,則此方法會傳回 False。
- islower()
如果記錄序列中的所有 ASCII 字元都是小寫,則傳回 True。
如果沒有大小寫字元,則此方法會傳回 False。
- reverse_complement(id: bool = False, name: bool = False, description: bool = False, features: bool = True, annotations: bool = False, letter_annotations: bool = True, dbxrefs: bool = False) SeqRecord
傳回具有反向互補序列的新 SeqRecord。
預設情況下,新的記錄不會保留序列識別碼、名稱、描述、一般註釋或資料庫交叉參照 - 這些不太可能適用於反向序列。
您可以將傳回記錄的 id、名稱和描述指定為字串,或 True 以保留父項的 id、名稱和描述,或 False 以使用預設值。
您可以指定傳回記錄的 features 為 SeqFeature 物件的清單,或 True 以保留父項的 features,或 False 以省略它們。預設值是保留原始的 features(並調整鏈和位置)。
您也可以將傳回記錄的 annotations 和 letter_annotations 指定為字典、True 以保留父項的 annotations 和 letter_annotations,或 False 以省略它們。預設值是保留原始的 annotations(並反轉字母註釋)。
為了展示前字母註釋會發生什麼情況,請考慮一個範例 Solexa 變體 FASTQ 檔案,其中包含一個條目,我們將其讀取為 SeqRecord
>>> from Bio import SeqIO >>> record = SeqIO.read("Quality/solexa_faked.fastq", "fastq-solexa") >>> print("%s %s" % (record.id, record.seq)) slxa_0001_1_0001_01 ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTNNNNNN >>> print(list(record.letter_annotations)) ['solexa_quality'] >>> print(record.letter_annotations["solexa_quality"]) [40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5]
現在取反向互補,這裡我們明確給出一個新的識別碼(具有後綴的舊識別碼)
>>> rc_record = record.reverse_complement(id=record.id + "_rc") >>> print("%s %s" % (rc_record.id, rc_record.seq)) slxa_0001_1_0001_01_rc NNNNNNACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT
請注意,逐字母註釋也已被反轉,儘管這可能不適用於所有情況。
>>> print(rc_record.letter_annotations["solexa_quality"]) [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40]
現在,對於 features,我們需要一個不同的範例。解析 GenBank 檔案可能是取得具有 features 的好範例的最簡單方法…
>>> from Bio import SeqIO >>> with open("GenBank/pBAD30.gb") as handle: ... plasmid = SeqIO.read(handle, "gb") >>> print("%s %i" % (plasmid.id, len(plasmid))) pBAD30 4923 >>> plasmid.seq Seq('GCTAGCGGAGTGTATACTGGCTTACTATGTTGGCACTGATGAGGGTGTCAGTGA...ATG') >>> len(plasmid.features) 13
現在,讓我們取這個整個質體的反向互補
>>> rc_plasmid = plasmid.reverse_complement(id=plasmid.id+"_rc") >>> print("%s %i" % (rc_plasmid.id, len(rc_plasmid))) pBAD30_rc 4923 >>> rc_plasmid.seq Seq('CATGGGCAAATATTATACGCAAGGCGACAAGGTGCTGATGCCGCTGGCGATTCA...AGC') >>> len(rc_plasmid.features) 13
讓我們比較第一個 CDS feature - 它已從第二個 feature(索引 1)變為倒數第二個 feature(索引 -2),它的鏈已變更,並且位置已切換。
>>> print(plasmid.features[1]) type: CDS location: [1081:1960](-) qualifiers: Key: label, Value: ['araC'] Key: note, Value: ['araC regulator of the arabinose BAD promoter'] Key: vntifkey, Value: ['4'] >>> print(rc_plasmid.features[-2]) type: CDS location: [2963:3842](+) qualifiers: Key: label, Value: ['araC'] Key: note, Value: ['araC regulator of the arabinose BAD promoter'] Key: vntifkey, Value: ['4']
您可以根據質體的長度來檢查這個新的位置
>>> len(plasmid) - 1081 3842 >>> len(plasmid) - 1960 2963
請注意,如果 SeqFeature 註釋包含任何鏈特定的資訊(例如,SNP 的鹼基變更),則不會修改此資訊,並且在反向互補後需要更正。
請注意,嘗試反向互補蛋白質 SeqRecord 會引發例外狀況
>>> from Bio.Seq import Seq >>> from Bio.SeqRecord import SeqRecord >>> protein_rec = SeqRecord(Seq("MAIVMGR"), id="Test", ... annotations={"molecule_type": "protein"}) >>> protein_rec.reverse_complement() Traceback (most recent call last): ... ValueError: Proteins do not have complements!
如果您有不含任何 U 鹼基的 RNA,則必須將其註釋為 RNA,否則預設會將其視為 DNA,並將 A 對應到 T
>>> from Bio.Seq import Seq >>> from Bio.SeqRecord import SeqRecord >>> rna1 = SeqRecord(Seq("ACG"), id="Test") >>> rna2 = SeqRecord(Seq("ACG"), id="Test", annotations={"molecule_type": "RNA"}) >>> print(rna1.reverse_complement(id="RC", description="unk").format("fasta")) >RC unk CGT >>> print(rna2.reverse_complement(id="RC", description="RNA").format("fasta")) >RC RNA CGU
另請注意,您可以使用 MutableSeq 反向互補 SeqRecord
>>> from Bio.Seq import MutableSeq >>> from Bio.SeqRecord import SeqRecord >>> rec = SeqRecord(MutableSeq("ACGT"), id="Test") >>> rec.seq[0] = "T" >>> print("%s %s" % (rec.id, rec.seq)) Test TCGT >>> rc = rec.reverse_complement(id=True) >>> print("%s %s" % (rc.id, rc.seq)) Test ACGA
- translate(table: str = 'Standard', stop_symbol: str = '*', to_stop: bool = False, cds: bool = False, gap: str | None = None, id: bool = False, name: bool = False, description: bool = False, features: bool = False, annotations: bool = False, letter_annotations: bool = False, dbxrefs: bool = False) SeqRecord
傳回帶有已翻譯序列的新 SeqRecord。
此函式會呼叫 record 的 .seq.translate() 方法(該方法描述了與翻譯相關的引數,例如遺傳密碼表)。
預設情況下,新的 record 不會保留序列識別符、名稱、描述、一般註解或資料庫交叉參考 - 這些不太可能適用於已翻譯的序列。
您可以將傳回記錄的 id、名稱和描述指定為字串,或 True 以保留父項的 id、名稱和描述,或 False 以使用預設值。
您可以使用 SeqFeature 物件的列表指定傳回的 record 的特徵,或使用 False(預設)省略它們。
您也可以將傳回的 record 的註解和 letter_annotations 指定為字典,使用 True 保留父物件的註解(僅限註解),或使用 False(預設)省略它們。
例如,載入 FASTA 基因並進行翻譯:
>>> from Bio import SeqIO >>> gene_record = SeqIO.read("Fasta/sweetpea.nu", "fasta") >>> print(gene_record.format("fasta")) >gi|3176602|gb|U78617.1|LOU78617 Lathyrus odoratus phytochrome A (PHYA) gene, partial cds CAGGCTGCGCGGTTTCTATTTATGAAGAACAAGGTCCGTATGATAGTTGATTGTCATGCA AAACATGTGAAGGTTCTTCAAGACGAAAAACTCCCATTTGATTTGACTCTGTGCGGTTCG ACCTTAAGAGCTCCACATAGTTGCCATTTGCAGTACATGGCTAACATGGATTCAATTGCT TCATTGGTTATGGCAGTGGTCGTCAATGACAGCGATGAAGATGGAGATAGCCGTGACGCA GTTCTACCACAAAAGAAAAAGAGACTTTGGGGTTTGGTAGTTTGTCATAACACTACTCCG AGGTTTGTT
現在翻譯 record,指定新的 ID 和描述:
>>> protein_record = gene_record.translate(table=11, ... id="phya", ... description="translation") >>> print(protein_record.format("fasta")) >phya translation QAARFLFMKNKVRMIVDCHAKHVKVLQDEKLPFDLTLCGSTLRAPHSCHLQYMANMDSIA SLVMAVVVNDSDEDGDSRDAVLPQKKKRLWGLVVCHNTTPRFV