Bio.Seq 模块

提供用于表示生物序列的对象。

另请参见我们的教程中的 Seq wiki 和章节
class Bio.Seq.SequenceDataAbstractBaseClass

Bases: ABC

用于序列内容提供者的抽象基类。

大多数用户不需要使用此类。 它在内部用作序列内容提供者类的基类,例如此模块中定义的 _UndefinedSequenceData,以及 Bio.SeqIO.TwoBitIO 中的 _TwoBitSequenceData。 这些类的实例可以用作创建 Seq 对象时的数据参数的 bytes 对象的替代,并在通过 __getitem__ 请求时才提供序列内容。 这允许延迟解析器仅为请求的序列区域加载和解析来自文件的序列数据,而 _UndefinedSequenceData 实例在请求未定义的序列数据时引发异常。

类似地提供按需解析序列数据的延迟解析器的未来实现应使用此抽象类的子类并实现抽象方法 __len____getitem__

  • __len__ 必须返回序列长度;

  • __getitem__ 必须返回

    • 用于请求区域的 bytes 对象;或

    • 用于请求区域的子类的新的实例;或

    • 引发 UndefinedSequenceError

    为大小为零的序列区域调用 __getitem__ 应始终返回一个空的 bytes 对象。 为完整序列(如 data[:] 中)调用 __getitem__ 应返回具有完整序列的 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)

返回 data[start:end] 中子串 sub 的非重叠出现的次数。

可选参数 start 和 end 的解释与切片表示法中的解释相同。 此方法的行为与 Python 字符串的 count 方法相同。

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

返回 data 中找到子串 sub 的最低索引。

返回 data 中找到子串 sub 的最低索引,使得 sub 包含在 data[start,end] 中。 可选参数 start 和 end 的解释与切片表示法中的解释相同。

如果失败,则返回 -1。

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

返回 data 中找到子串 sub 的最高索引。

返回 data 中找到子串 sub 的最高索引,使得 sub 包含在 data[start,end] 中。 可选参数 start 和 end 的解释与切片表示法中的解释相同。

如果失败,则返回 -1。

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

返回 data 中找到子串 sub 的最低索引。

返回 data 中找到子串 sub 的最低索引,使得 sub 包含在 data[start,end] 中。 可选参数 start 和 end 的解释与切片表示法中的解释相同。

当未找到子串时引发 ValueError。

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

返回 data 中找到子串 sub 的最高索引。

返回 data 中找到子串 sub 的最高索引,使得 sub 包含在 data[start,end] 中。 可选参数 start 和 end 的解释与切片表示法中的解释相同。

当未找到子串时引发 ValueError。

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

如果 data 以指定的前缀开头,则返回 True,否则返回 False。

使用可选的 start,测试从该位置开始的 data。 使用可选的 end,在该位置停止比较 data。 prefix 也可以是字节元组,用于尝试。

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

如果数据以指定的 suffix 结尾,则返回 True,否则返回 False。

可选的 start 参数指定测试数据的起始位置,可选的 end 参数指定测试数据的结束位置。 suffix 也可以是一个字节元组,用于尝试匹配。

split(sep=None, maxsplit=-1)

返回数据中各个部分的列表,使用 sep 作为分隔符。

sep

用于分割数据的分隔符。None(默认值)表示根据 ASCII 空白字符(空格、制表符、回车符、换行符、换页符、垂直制表符)进行分割。

maxsplit

分割次数的最大值。-1(默认值)表示没有限制。

rsplit(sep=None, maxsplit=-1)

返回数据中各个部分的列表,使用 sep 作为分隔符。

sep

用于分割数据的分隔符。None(默认值)表示根据 ASCII 空白字符(空格、制表符、回车符、换行符、换页符、垂直制表符)进行分割。

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 的字节对象。

可选参数 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)

Bases: _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)

Bases: _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

Bases: 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 对象 (用于非标准遗传密码)。默认为“标准”表。

  • 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 对象是不可变的,因此如果 reverse_complementSeq 对象上调用,并且 inplace=True,则会引发 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 对象是不可变的,因此如果 reverse_complementSeq 对象上调用,并且 inplace=True,则会引发 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 对象是不可变的,因此如果 reverse_complementSeq 对象上调用,并且 inplace=True,则会引发 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 对象是不可变的,因此如果 reverse_complementSeq 对象上调用,并且 inplace=True,则会引发 TypeError