成对序列比对 bio 中的核苷酸分隔符 python
Nucleotides separator in the pairwise sequence alignment bio python
我有包含不同修饰核苷酸和残基的 RNA 序列。其中一些例如 N79, 8XU, SDG, I
.
我想使用 biopython 的 pairwise2.align.localms
将它们成对对齐。是否可以不以字符串形式输入而是以列表形式输入,以便准确说明这些修改后的碱基?
正确的技巧是什么?
Biopython 的 pairwise2 模块适用于字母串,可以是任何东西 - 例如:
>>> from Bio import pairwise2
>>> from Bio.pairwise2 import format_alignment
>>> for a in pairwise2.align.localms("ACCGTN97CT", "ACCG8DXCT", 2, -1, -.5, -.1):
... print(format_alignment(*a))
...
ACCG--TN97CT
||||||||||||
ACCG8DX---CT
Score=9.7
ACCGTN97--CT
||||||||||||
ACCG---8DXCT
Score=9.7
您可以根据需要设置match/mismatch分。但是,这假定每个字母都是一个单独的元素。
您的问题中不清楚您的示例 N79 是一个修饰核苷酸还是三个?如果您想将 N79 视为一个基础,这似乎是可能的:我认为这不是故意的(所以我不想依赖这种行为),但我可以欺骗 pairwise2 来处理字符串列表:
>>> for a in pairwise2.align.localms(["A", "C", "C", "G", "T", "N97", "C", "T"], ["A", "C", "C", "G", "8DX", "C", "T"], 2, -1, -.5, -.1, gap_char=["-"]):
... print(format_alignment(*a)) ...
['A', 'C', 'C', 'G', 'T', 'N97', 'C', 'T']
||||||||
['A', 'C', 'C', 'G', '8DX', '-', 'C', 'T']
Score=10.5
['A', 'C', 'C', 'G', 'T', 'N97', 'C', 'T']
||||||||
['A', 'C', 'C', 'G', '-', '8DX', 'C', 'T']
Score=10.5
请注意,默认的 format_alignment 函数显示效果不是很好。
抱歉添加另一个答案,但我的声誉不足以添加评论...
为了详细说明 peterjc 的回答,接受列表作为输入是 pairwise2
的预期行为(现在我明白它可能有什么用......)。
你是对的,它也与 gap_char
参数有关:由于你将序列作为列表应用,因此间隙字符也必须定义为列表 (["-"]
)。
我有包含不同修饰核苷酸和残基的 RNA 序列。其中一些例如 N79, 8XU, SDG, I
.
我想使用 biopython 的 pairwise2.align.localms
将它们成对对齐。是否可以不以字符串形式输入而是以列表形式输入,以便准确说明这些修改后的碱基?
正确的技巧是什么?
Biopython 的 pairwise2 模块适用于字母串,可以是任何东西 - 例如:
>>> from Bio import pairwise2
>>> from Bio.pairwise2 import format_alignment
>>> for a in pairwise2.align.localms("ACCGTN97CT", "ACCG8DXCT", 2, -1, -.5, -.1):
... print(format_alignment(*a))
...
ACCG--TN97CT
||||||||||||
ACCG8DX---CT
Score=9.7
ACCGTN97--CT
||||||||||||
ACCG---8DXCT
Score=9.7
您可以根据需要设置match/mismatch分。但是,这假定每个字母都是一个单独的元素。
您的问题中不清楚您的示例 N79 是一个修饰核苷酸还是三个?如果您想将 N79 视为一个基础,这似乎是可能的:我认为这不是故意的(所以我不想依赖这种行为),但我可以欺骗 pairwise2 来处理字符串列表:
>>> for a in pairwise2.align.localms(["A", "C", "C", "G", "T", "N97", "C", "T"], ["A", "C", "C", "G", "8DX", "C", "T"], 2, -1, -.5, -.1, gap_char=["-"]):
... print(format_alignment(*a)) ...
['A', 'C', 'C', 'G', 'T', 'N97', 'C', 'T']
||||||||
['A', 'C', 'C', 'G', '8DX', '-', 'C', 'T']
Score=10.5
['A', 'C', 'C', 'G', 'T', 'N97', 'C', 'T']
||||||||
['A', 'C', 'C', 'G', '-', '8DX', 'C', 'T']
Score=10.5
请注意,默认的 format_alignment 函数显示效果不是很好。
抱歉添加另一个答案,但我的声誉不足以添加评论...
为了详细说明 peterjc 的回答,接受列表作为输入是 pairwise2
的预期行为(现在我明白它可能有什么用......)。
你是对的,它也与 gap_char
参数有关:由于你将序列作为列表应用,因此间隙字符也必须定义为列表 (["-"]
)。