Bio.Seq 模組

提供物件來表示生物序列。

另請參閱 Seq wiki 和我們教學中的章節
class Bio.Seq.SequenceDataAbstractBaseClass

基礎類別: ABC

序列內容提供者的抽象基礎類別。

大多數使用者不需要使用這個類別。它在內部用作序列內容提供者類別的基礎類別,例如此模組中定義的 _UndefinedSequenceData 和 Bio.SeqIO.TwoBitIO 中的 _TwoBitSequenceData。這些類別的實例可以用來代替 bytes 物件作為建立 Seq 物件時的資料引數,並且僅在透過 __getitem__ 要求時才提供序列內容。這允許惰性剖析器僅針對要求的序列區域從檔案載入和剖析序列資料,並且允許 _UndefinedSequenceData 實例在要求未定義的序列資料時引發例外狀況。

未來類似地提供序列資料隨需剖析的惰性剖析器實作,應使用此抽象類別的子類別,並實作抽象方法 __len____getitem__

  • __len__ 必須傳回序列長度;

  • __getitem__ 必須傳回

    • 要求的區域的 bytes 物件;或

    • 要求的區域的子類別的新實例;或

    • 引發 UndefinedSequenceError

    針對大小為零的序列區域呼叫 __getitem__ 應始終傳回空的 bytes 物件。針對完整序列呼叫 __getitem__ (如 data[:]) 應傳回具有完整序列的 bytes 物件,或引發 UndefinedSequenceError

SequenceDataAbstractBaseClass 的子類別必須在它們的 __init__ 方法中呼叫 super().__init__()

__slots__ = ()
__init__()

檢查 __getitem__ 是否傳回類似位元組的物件。

abstract __len__()
abstract __getitem__(key)
__bytes__()
__hash__()

傳回 hash(self)。

__eq__(other)

傳回 self==value。

__lt__(other)

傳回 self<value。

__le__(other)

傳回 self<=value。

__gt__(other)

傳回 self>value。

__ge__(other)

傳回 self>=value。

__add__(other)
__radd__(other)
__mul__(other)
__contains__(item)
decode(encoding='utf-8')

使用為 encoding 註冊的編解碼器將資料解碼為位元組。

encoding

用於解碼位元組的編碼。

count(sub, start=None, end=None)

傳回資料 [start:end] 中子字串 sub 的不重疊出現次數。

可選引數 start 和 end 的解讀方式與切片表示法相同。這個方法的行為類似於 Python 字串的 count 方法。

find(sub, start=None, end=None)

傳回在資料中找到子字串 sub 的最低索引。

傳回在資料中找到子字串 sub 的最低索引,使得 sub 包含在 data[start,end] 內。可選引數 start 和 end 的解讀方式與切片表示法相同。

失敗時傳回 -1。

rfind(sub, start=None, end=None)

傳回在資料中找到子字串 sub 的最高索引。

傳回在資料中找到子字串 sub 的最高索引,使得 sub 包含在 data[start,end] 內。可選引數 start 和 end 的解讀方式與切片表示法相同。

失敗時傳回 -1。

index(sub, start=None, end=None)

傳回在資料中找到子字串 sub 的最低索引。

傳回在資料中找到子字串 sub 的最低索引,使得 sub 包含在 data[start,end] 內。可選引數 start 和 end 的解讀方式與切片表示法相同。

當找不到子字串時,引發 ValueError。

rindex(sub, start=None, end=None)

傳回在資料中找到子字串 sub 的最高索引。

傳回在資料中找到子字串 sub 的最高索引,使得 sub 包含在 data[start,end] 內。可選引數 start 和 end 的解讀方式與切片表示法相同。

當找不到子字串時,引發 ValueError。

startswith(prefix, start=None, end=None)

如果資料以指定的字首開頭,則傳回 True,否則傳回 False。

使用可選的 start,測試從該位置開始的資料。使用可選的 end,停止在該位置比較資料。prefix 也可以是要嘗試的位元組元組。

endswith(suffix, start=None, end=None)

如果資料以指定的字尾結尾,則傳回 True,否則傳回 False。

使用可選的 start,測試從該位置開始的資料。使用可選的 end,停止在該位置比較資料。suffix 也可以是要嘗試的位元組元組。

split(sep=None, maxsplit=-1)

使用 sep 作為分隔符號,返回資料中各區段的列表。

sep

用於分割資料的分隔符號。None (預設值) 表示以 ASCII 空白字元 (空格、Tab、Return、換行、換頁、垂直 Tab) 分割。

maxsplit

要執行的最大分割次數。-1 (預設值) 表示沒有限制。

rsplit(sep=None, maxsplit=-1)

使用 sep 作為分隔符號,返回資料中各區段的列表。

sep

用於分割資料的分隔符號。None (預設值) 表示以 ASCII 空白字元 (空格、Tab、Return、換行、換頁、垂直 Tab) 分割。

maxsplit

要執行的最大分割次數。-1 (預設值) 表示沒有限制。

分割從資料的結尾開始,然後向前端進行。

strip(chars=None)

移除參數中包含的前導和尾隨字元。

如果省略參數或為 None,則移除前導和尾隨 ASCII 空白字元。

lstrip(chars=None)

移除參數中包含的前導字元。

如果省略參數或為 None,則移除前導 ASCII 空白字元。

rstrip(chars=None)

移除參數中包含的尾隨字元。

如果省略參數或為 None,則移除尾隨 ASCII 空白字元。

removeprefix(prefix)

如果存在前綴,則將其移除。

removesuffix(suffix)

如果存在後綴,則將其移除。

upper()

返回資料的副本,其中所有 ASCII 字元都轉換為大寫。

lower()

返回資料的副本,其中所有 ASCII 字元都轉換為小寫。

isupper()

如果資料中的所有 ASCII 字元都是大寫,則返回 True。

如果沒有區分大小寫的字元,則該方法返回 False。

islower()

如果資料中的所有 ASCII 字元都是小寫,則返回 True。

如果沒有區分大小寫的字元,則該方法返回 False。

replace(old, new)

返回副本,其中所有出現的子字串 old 都被 new 取代。

translate(table, delete=b'')

返回副本,其中每個字元都按照給定的轉換表對應。

table

轉換表,必須是長度為 256 的 bytes 物件。

會移除可選參數 delete 中出現的所有字元。剩餘的字元會透過給定的轉換表對應。

property defined

如果序列已定義,則返回 True;如果未定義或部分定義,則返回 False。

零長度的序列始終被視為已定義。

property defined_ranges

返回序列內容已定義的範圍的元組。

返回值的格式為 ((start1, end1), (start2, end2), ...)。

__abstractmethods__ = frozenset({'__getitem__', '__len__'})
class Bio.Seq.Seq(data: str | bytes | bytearray | _SeqAbstractBaseClass | SequenceDataAbstractBaseClass | dict | None, length: int | None = None)

基礎類別:_SeqAbstractBaseClass

唯讀序列物件 (本質上是具有生物方法字串)。

與一般 Python 字串一樣,我們的基本序列物件是不可變的。這可防止您執行例如 my_seq[5] = “A”,但允許 Seq 物件用作字典鍵。

Seq 物件提供許多類似字串的方法 (例如 count、find、split 和 strip)。

Seq 物件也提供一些生物方法,例如 complement、reverse_complement、transcribe、back_transcribe 和 translate (不適用於蛋白質序列)。

__init__(data: str | bytes | bytearray | _SeqAbstractBaseClass | SequenceDataAbstractBaseClass | dict | None, length: int | None = None)

建立 Seq 物件。

引數
  • data - 序列,必填 (字串)

  • length - 序列長度,僅當 data 為 None 或字典時使用 (整數)

您通常會使用 Bio.SeqIO 從檔案中讀取序列作為 SeqRecord 物件,其序列會透過 seq 屬性以 Seq 物件形式公開。

但是,您也可以直接建立 Seq 物件

>>> from Bio.Seq import Seq
>>> my_seq = Seq("MKQHKAMIVALIVICITAVVAALVTRKDLCEVHIRTGQTEVAVF")
>>> my_seq
Seq('MKQHKAMIVALIVICITAVVAALVTRKDLCEVHIRTGQTEVAVF')
>>> print(my_seq)
MKQHKAMIVALIVICITAVVAALVTRKDLCEVHIRTGQTEVAVF

若要建立具有已知長度但未知序列內容的 Seq 物件,請使用 None 作為 data 引數,並將序列長度傳遞給 length 引數。嘗試存取以這種方式建立的 Seq 物件的序列內容會引發 UndefinedSequenceError

>>> my_undefined_sequence = Seq(None, 20)
>>> my_undefined_sequence
Seq(None, length=20)
>>> len(my_undefined_sequence)
20
>>> print(my_undefined_sequence)
Traceback (most recent call last):
...
Bio.Seq.UndefinedSequenceError: Sequence content is undefined

如果只知道序列的部分內容,請使用字典作為 data 引數來傳遞已知的序列片段

>>> my_partially_defined_sequence = Seq({3: "ACGT"}, 10)
>>> my_partially_defined_sequence
Seq({3: 'ACGT'}, length=10)
>>> len(my_partially_defined_sequence)
10
>>> print(my_partially_defined_sequence)
Traceback (most recent call last):
...
Bio.Seq.UndefinedSequenceError: Sequence content is only partially defined
>>> my_partially_defined_sequence[3:7]
Seq('ACGT')
>>> print(my_partially_defined_sequence[3:7])
ACGT
__hash__()

序列的雜湊值,以字串形式用於比較。

請參閱 Seq 物件比較文件 (尤其是方法 __eq__),因為這在 Biopython 1.65 中已變更。較舊的版本會以物件識別進行雜湊。

__abstractmethods__ = frozenset({})
__annotations__ = {'_data': typing.Union[bytes, Bio.Seq.SequenceDataAbstractBaseClass]}
class Bio.Seq.MutableSeq(data)

基礎類別:_SeqAbstractBaseClass

一個可編輯的序列物件。

與一般的 Python 字串和我們基本的序列物件(Seq 類別)不同,後者是不可變的,MutableSeq 允許您就地編輯序列。然而,這意味著您不能將 MutableSeq 物件用作字典的鍵。

>>> from Bio.Seq import MutableSeq
>>> my_seq = MutableSeq("ACTCGTCGTCG")
>>> my_seq
MutableSeq('ACTCGTCGTCG')
>>> my_seq[5]
'T'
>>> my_seq[5] = "A"
>>> my_seq
MutableSeq('ACTCGACGTCG')
>>> my_seq[5]
'A'
>>> my_seq[5:8] = "NNN"
>>> my_seq
MutableSeq('ACTCGNNNTCG')
>>> len(my_seq)
11

請注意,MutableSeq 物件不支援像 Seq 物件那麼多的字串式或生物方法。

__init__(data)

建立一個 MutableSeq 物件。

__setitem__(index, value)

透過 value 參數設定單個字母的子序列。

>>> my_seq = MutableSeq('ACTCGACGTCG')
>>> my_seq[0] = 'T'
>>> my_seq
MutableSeq('TCTCGACGTCG')
__delitem__(index)

刪除單個字母的子序列。

>>> my_seq = MutableSeq('ACTCGACGTCG')
>>> del my_seq[0]
>>> my_seq
MutableSeq('CTCGACGTCG')
append(c)

將子序列新增至可變的序列物件。

>>> my_seq = MutableSeq('ACTCGACGTCG')
>>> my_seq.append('A')
>>> my_seq
MutableSeq('ACTCGACGTCGA')

沒有回傳值。

insert(i, c)

在給定的索引處將子序列新增至可變的序列物件。

>>> my_seq = MutableSeq('ACTCGACGTCG')
>>> my_seq.insert(0,'A')
>>> my_seq
MutableSeq('AACTCGACGTCG')
>>> my_seq.insert(8,'G')
>>> my_seq
MutableSeq('AACTCGACGGTCG')

沒有回傳值。

pop(i=-1)

移除給定索引處的單個字母的子序列。

>>> my_seq = MutableSeq('ACTCGACGTCG')
>>> my_seq.pop()
'G'
>>> my_seq
MutableSeq('ACTCGACGTC')
>>> my_seq.pop()
'C'
>>> my_seq
MutableSeq('ACTCGACGT')

回傳序列的最後一個字元。

remove(item)

從可變的序列中移除單個字母的子序列。

>>> my_seq = MutableSeq('ACTCGACGTCG')
>>> my_seq.remove('C')
>>> my_seq
MutableSeq('ATCGACGTCG')
>>> my_seq.remove('A')
>>> my_seq
MutableSeq('TCGACGTCG')

沒有回傳值。

reverse()

修改可變序列以反轉自身。

沒有回傳值。

extend(other)

將序列新增至原始可變的序列物件。

>>> my_seq = MutableSeq('ACTCGACGTCG')
>>> my_seq.extend('A')
>>> my_seq
MutableSeq('ACTCGACGTCGA')
>>> my_seq.extend('TTT')
>>> my_seq
MutableSeq('ACTCGACGTCGATTT')

沒有回傳值。

__abstractmethods__ = frozenset({})
exception Bio.Seq.UndefinedSequenceError

繼承:ValueError

序列內容未定義。

Bio.Seq.transcribe(dna)

將 DNA 序列轉錄為 RNA。

依照慣例,該序列被解釋為 DNA 雙螺旋的編碼鏈,而不是模板鏈。這表示我們只需將 T 換成 U 即可得到 RNA 序列。

如果給定的是字串,則回傳新的字串物件。

如果給定的是 Seq 或 MutableSeq,則回傳新的 Seq 物件。

例如:

>>> transcribe("ACTGN")
'ACUGN'
Bio.Seq.back_transcribe(rna)

回傳反轉錄回 DNA 的 RNA 序列。

如果給定的是字串,則回傳新的字串物件。

如果給定的是 Seq 或 MutableSeq,則回傳新的 Seq 物件。

例如:

>>> back_transcribe("ACUGN")
'ACTGN'
Bio.Seq.translate(sequence, table='Standard', stop_symbol='*', to_stop=False, cds=False, gap=None)

將核苷酸序列轉譯成胺基酸。

如果給定的是字串,則回傳新的字串物件。如果給定的是 Seq 或 MutableSeq,則回傳 Seq 物件。

引數
  • table - 要使用哪個密碼子表?這可以是名稱(字串)、NCBI 識別碼(整數)或 CodonTable 物件(適用於非標準遺傳密碼)。預設為「Standard」表格。

  • stop_symbol - 單字元字串,用於任何終止符號,預設為星號「*」。

  • to_stop - 布林值,預設為 False,表示進行完整的轉譯,繼續通過任何終止密碼子(轉譯為指定的 stop_symbol)。如果為 True,則轉譯在第一個同框終止密碼子處終止(且 stop_symbol 不會附加到回傳的蛋白質序列)。

  • cds - 布林值,表示這是完整的 CDS。如果為 True,則會檢查序列是否以有效的替代起始密碼子開始(將轉譯為甲硫胺酸,M)、序列長度是否為 3 的倍數,以及最後是否有一個單一同框終止密碼子(無論 to_stop 選項為何,都將從蛋白質序列中排除)。如果這些測試失敗,則會引發例外狀況。

  • gap - 用於表示間隙的單字元字串。預設為 None。

使用預設(標準)遺傳密碼的簡單字串範例

>>> coding_dna = "GTGGCCATTGTAATGGGCCGCTGAAAGGGTGCCCGATAG"
>>> translate(coding_dna)
'VAIVMGR*KGAR*'
>>> translate(coding_dna, stop_symbol="@")
'VAIVMGR@KGAR@'
>>> translate(coding_dna, to_stop=True)
'VAIVMGR'

現在使用 NCBI 表格 2,其中 TGA 不是終止密碼子

>>> translate(coding_dna, table=2)
'VAIVMGRWKGAR*'
>>> translate(coding_dna, table=2, to_stop=True)
'VAIVMGRWKGAR'

事實上,此範例使用了 NCBI 表格 2 下有效的替代起始密碼子 GTG,這表示此範例是一個完整的有效 CDS,轉譯時應以甲硫胺酸開始(而非纈胺酸)

>>> translate(coding_dna, table=2, cds=True)
'MAIVMGRWKGAR'

請注意,如果序列沒有同框終止密碼子,則 to_stop 引數不會產生任何影響

>>> coding_dna2 = "GTGGCCATTGTAATGGGCCGC"
>>> translate(coding_dna2)
'VAIVMGR'
>>> translate(coding_dna2, to_stop=True)
'VAIVMGR'

注意 - 像「TAN」或「NNN」等模糊密碼子可能是胺基酸或終止密碼子。這些會轉譯為「X」。任何無效的密碼子(例如「TA?」或「T-A」)都會擲回 TranslationError。

但是,它會轉譯 DNA 或 RNA。

注意 - 自 1.71 版起,Biopython 包含具有「模糊終止密碼子」的密碼子表。這些是具有明確序列但具有依賴於上下文的編碼作為 STOP 或胺基酸的終止密碼子。使用這些表格時,'to_stop' 必須為 False(否則會引發 ValueError)。雙重編碼的密碼子將始終轉譯為胺基酸,但 'cds=True' 除外,其中最後一個密碼子將轉譯為 STOP。

>>> coding_dna3 = "ATGGCACGGAAGTGA"
>>> translate(coding_dna3)
'MARK*'
>>> translate(coding_dna3, table=27)  # Table 27: TGA -> STOP or W
'MARKW'

但是,它會引發 BiopythonWarning(未顯示)。

>>> translate(coding_dna3, table=27, cds=True)
'MARK'
>>> translate(coding_dna3, table=27, to_stop=True)
Traceback (most recent call last):
   ...
ValueError: You cannot use 'to_stop=True' with this table ...
Bio.Seq.reverse_complement(sequence, inplace=False)

回傳反向互補作為 DNA 序列。

如果給定的是字串,則回傳新的字串物件。如果給定的是 Seq 物件,則回傳新的 Seq 物件。如果給定的是 MutableSeq,則回傳新的 MutableSeq 物件。如果給定的是 SeqRecord 物件,則回傳新的 SeqRecord 物件。

>>> my_seq = "CGA"
>>> reverse_complement(my_seq)
'TCG'
>>> my_seq = Seq("CGA")
>>> reverse_complement(my_seq)
Seq('TCG')
>>> my_seq = MutableSeq("CGA")
>>> reverse_complement(my_seq)
MutableSeq('TCG')
>>> my_seq
MutableSeq('CGA')

序列中的任何 U 都會被視為 T

>>> reverse_complement(Seq("CGAUT"))
Seq('AATCG')

相反地,reverse_complement_rna 回傳 RNA 序列

>>> reverse_complement_rna(Seq("CGAUT"))
Seq('AAUCG')

支援大小寫字元,以及明確和模糊的核苷酸。所有其他字元都不會轉換

>>> reverse_complement("ACGTUacgtuXYZxyz")
'zrxZRXaacgtAACGT'

如果 inplace 為 True,則序列會就地修改並回傳

>>> my_seq = MutableSeq("CGA")
>>> reverse_complement(my_seq, inplace=True)
MutableSeq('TCG')
>>> my_seq
MutableSeq('TCG')

由於字串和 Seq 物件是不可變的,因此如果以 inplace=True 呼叫 reverse_complement,則會引發 TypeError

Bio.Seq.reverse_complement_rna(sequence, inplace=False)

回傳反向互補作為 RNA 序列。

如果給定的是字串,則回傳新的字串物件。如果給定的是 Seq 物件,則回傳新的 Seq 物件。如果給定的是 MutableSeq,則回傳新的 MutableSeq 物件。如果給定的是 SeqRecord 物件,則回傳新的 SeqRecord 物件。

>>> my_seq = "CGA"
>>> reverse_complement_rna(my_seq)
'UCG'
>>> my_seq = Seq("CGA")
>>> reverse_complement_rna(my_seq)
Seq('UCG')
>>> my_seq = MutableSeq("CGA")
>>> reverse_complement_rna(my_seq)
MutableSeq('UCG')
>>> my_seq
MutableSeq('CGA')

序列中的任何 T 都會被視為 U

>>> reverse_complement_rna(Seq("CGAUT"))
Seq('AAUCG')

相反地,reverse_complement 回傳 DNA 序列

>>> reverse_complement(Seq("CGAUT"), inplace=False)
Seq('AATCG')

支援大小寫字元,以及明確和模糊的核苷酸。所有其他字元都不會轉換

>>> reverse_complement_rna("ACGTUacgtuXYZxyz")
'zrxZRXaacguAACGU'

如果 inplace 為 True,則序列會就地修改並回傳

>>> my_seq = MutableSeq("CGA")
>>> reverse_complement_rna(my_seq, inplace=True)
MutableSeq('UCG')
>>> my_seq
MutableSeq('UCG')

由於字串和 Seq 物件是不可變的,因此如果以 inplace=True 呼叫 reverse_complement,則會引發 TypeError

Bio.Seq.complement(sequence, inplace=False)

回傳互補序列作為 DNA 序列。

如果給定的是字串,則回傳新的字串物件。如果給定的是 Seq 物件,則回傳新的 Seq 物件。如果給定的是 MutableSeq,則回傳新的 MutableSeq 物件。如果給定的是 SeqRecord 物件,則回傳新的 SeqRecord 物件。

>>> my_seq = "CGA"
>>> complement(my_seq)
'GCT'
>>> my_seq = Seq("CGA")
>>> complement(my_seq)
Seq('GCT')
>>> my_seq = MutableSeq("CGA")
>>> complement(my_seq)
MutableSeq('GCT')
>>> my_seq
MutableSeq('CGA')

序列中的任何 U 都會被視為 T

>>> complement(Seq("CGAUT"))
Seq('GCTAA')

相反地,complement_rna 回傳 RNA 序列

>>> complement_rna(Seq("CGAUT"))
Seq('GCUAA')

支援大小寫字元,以及明確和模糊的核苷酸。所有其他字元都不會轉換

>>> complement("ACGTUacgtuXYZxyz")
'TGCAAtgcaaXRZxrz'

如果 inplace 為 True,則序列會就地修改並回傳

>>> my_seq = MutableSeq("CGA")
>>> complement(my_seq, inplace=True)
MutableSeq('GCT')
>>> my_seq
MutableSeq('GCT')

由於字串和 Seq 物件是不可變的,因此如果以 inplace=True 呼叫 reverse_complement,則會引發 TypeError

Bio.Seq.complement_rna(sequence, inplace=False)

回傳互補序列作為 RNA 序列。

如果給定的是字串,則回傳新的字串物件。如果給定的是 Seq 物件,則回傳新的 Seq 物件。如果給定的是 MutableSeq,則回傳新的 MutableSeq 物件。如果給定的是 SeqRecord 物件,則回傳新的 SeqRecord 物件。

>>> my_seq = "CGA"
>>> complement_rna(my_seq)
'GCU'
>>> my_seq = Seq("CGA")
>>> complement_rna(my_seq)
Seq('GCU')
>>> my_seq = MutableSeq("CGA")
>>> complement_rna(my_seq)
MutableSeq('GCU')
>>> my_seq
MutableSeq('CGA')

序列中的任何 T 都會被視為 U

>>> complement_rna(Seq("CGAUT"))
Seq('GCUAA')

相反地,complement 回傳 DNA 序列

>>> complement(Seq("CGAUT"))
Seq('GCTAA')

支援大小寫字元,以及明確和模糊的核苷酸。所有其他字元都不會轉換

>>> complement_rna("ACGTUacgtuXYZxyz")
'UGCAAugcaaXRZxrz'

如果 inplace 為 True,則序列會就地修改並回傳

>>> my_seq = MutableSeq("CGA")
>>> complement(my_seq, inplace=True)
MutableSeq('GCT')
>>> my_seq
MutableSeq('GCT')

由於字串和 Seq 物件是不可變的,因此如果以 inplace=True 呼叫 reverse_complement,則會引發 TypeError