【问题标题】:Remove sequence by coordinates with Biopython使用 Biopython 按坐标删除序列
【发布时间】:2020-01-29 21:23:10
【问题描述】:

你好

我有一个序列,例如:

record_dict = SeqIO.to_dict(SeqIO.parse("sequence.fasta", "fasta"))

>sequence1 
AAACCCGGGTTTAAACCCGGGTTTGGGTTTGGG

我从这个序列中知道如何选择具有坐标的特定部分:

print(record_dict[sequence1].seq[coordinate_start:coordinate_end])
print(record_dict[sequence1].seq[3:7])

我得到:

CCCGG

但是如果我想从

中删除这部分
>sequence1 
AAACCCGGGTTTAAACCCGGGTTTGGGTTTGGG 

得到

>sequence1 
AAACGTTTAAACCCGGGTTTGGGTTTGGG

有人有想法吗?

感谢您的帮助

这里有一个更好的例子

ACCGCTTTGAATCCGAGCTAG
           ---- ----

我想删除 2 个部分:

TCCG和GCTA对应的坐标

11:1416:19

最后我想删除两者并得到:

>seq
ACCGCTTTGAAAG

【问题讨论】:

  • 仅供参考,您的示例是错误的。如果删除 CCCGG,第四个字母就不会是 C

标签: python bioinformatics biopython fasta


【解决方案1】:

你可以把你想要的两个部分加在一起:

sequence_1 = 'AAACCCGGGTTTAAACCCGGGTTTGGGTTTGGG'
sequence_1a = sequence_1[:4]
sequence_1b = sequence_1[8:]
sequence_2 = sequence_1a + sequence_1b
print(sequence_2)

>>> AAACGTTTAAACCCGGGTTTGGGTTTGGG

请注意,我已将 1 添加到您的两个索引中,以便删除正确的部分。

如果您想对多个部分执行此操作,可以通过循环列表来执行此操作:

sequence_1 = 'ACCGCTTTGAATCCGAGCTAG'
indexes_to_delete = [(11, 14), (16, 19)]
output_sequence = ''
start_value = 0
for start_delete, end_delete in indexes_to_delete:
    output_sequence += sequence_1[start_value: start_delete]
    start_value = end_delete
output_sequence += sequence_1[start_value:]
print(output_sequence)

>>> ACCGCTTTGAAGAAG

【讨论】:

  • 我明白你的意思,但这里是一个简单的例子,在真实数据中我可以有数千个坐标并切割序列_1 的几个部分。我添加了另一个示例向您展示
  • @Grendel 我已经为您的问题添加了修复程序
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
  • 2020-06-03
  • 1970-01-01
  • 1970-01-01
  • 2017-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多