gpt4 book ai didi

python - 使用 block 切割 DNA 序列

转载 作者:太空宇宙 更新时间:2023-11-03 21:40:51 28 4
gpt4 key购买 nike

我想制作一个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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com