python - 使用 block 切割 DNA 序列

标签 python python-3.x

我想制作一个Python程序,其中在文本文件中给出DNA序列。它有超过9000个字符。我必须将序列剪成 3 个字符 所以我们的框架从1到3读取,然后4到6,然后7到9,这被称为密码子。

例如,序列是

ACCTGCCTCTTACGAGGCGACACTCCACCATGGATCACTCCCCTGTGAGGAACTACTGTCTTCACGCAGA

那么我必须把它剪成3个字符。我已经做到了。我的问题是如何从给定的 DNA 中取出 GENE 序列? GENE 序列从 ATG 开始,到 TAGTAATGA 结束。

如果我使用正则表达式,这很容易做到。但问题是,如果你看一下上面的序列,ATG 就会从第 30 位上升到第 32 位。我们的框架从 1 到 3 读取,然后从 4 到 6 读取。在这种情况下,当它达到28 到 30 时,它不会生成ATG

有人能理解我的问题并帮助我吗?我现在分享我的代码:

import numpy as np
import pandas as pd
import re
from pathlib import Path
dna = Path('C:/Users/abdul/Downloads/Compressed/MAJU/HCV-PK1-sequence - 
edited.txt').read_text()
l = [c for c in dna if c!='\n']
r = len(l)
for x in range(0,r,3):
    y=x+3
    codon = l[x:y]
    a = ''.join(codon)
    print(a)
if(a == re.findall('ATG(...)+?(TAG|TAA|TGA)', dna)):
    print("Yes")

最佳答案

像这样循环 3 个阅读框:

dna = ''.join(dna)
for frame in [0,1,2]:
    codons = [dna[x:x+3] for x in range(frame,len(dna)-2,3)]

但正确的答案是安装biopython并使用它的序列操作函数。它还将帮助您从文件中读取序列。

不使用biopython的解决方案:

def find_orf(seq,start):
    for pos in range(start+3,len(seq)-2,3):
        codon = seq[pos:pos+3]
        if codon in ['TAA','TAG','TGA']:
            return seq[start:pos+3]
    return seq[start:] # if we don't find inframe stop codon return whole sequence from start codon to end


# Assuming seq is a string, not a list of characters:
seq = 'ACCTGCCTCTTACGAGGCGACACTCCACCATGGATCACTCCCCTGTGAGGAACTACTGTCAGCCTAATTAATAAGGTAAC'
orfs = []
for frame in [0,1,2]:
    for pos in range(frame,len(seq)-2,3):
        codon = seq[pos:pos+3]
        if codon == 'ATG':
            orf = find_orf(seq,pos)
            orfs.append(orf)

print(orfs)

关于python - 使用 block 切割 DNA 序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52870107/

相关文章:

python - 我想使用 pyinstaller 将 .py 文件制作成 exe 文件

python - 如何在 Bokeh Hovertool 中仅显示整数

javascript - 获取错误 SyntaxError : Unexpected token < django-jquery-fileupload

python - 如何让 web2py 开发服务器跟踪文件更改并自动重启?

python - 如何迭代列中的每个单元格并对每个单元格执行操作

python - 使用 Python 3.9 和 psycopg3 时,存储在 Postgres 数据库中的混搭表情符号不会作为单个表情符号返回。例如👩‍💻返回👩\u200d💻

python - 从基于文件的列和行中的最大值中删除重复项 -pandas

python - xlsxwriter 条件格式 icon_set 中间值 = 0 未显示正确的箭头

python-3.x - 使用 boto3 创建 S3 对象时,如何分配 bucket-owner-full-control?

python - 从 "lists of lists"和 "list"创建两个单独的 "list of lists"