快速解析字典序列

2024-10-01 17:27:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要最简单的解决方案来转换法斯塔.txt包含多个核苷酸序列

>seq1
TAGATTCTGAGTTATCTCTTGCATTAGCAGGTCATCCTGGTCAAACCGCTACTGTTCCGG
CTTTCTGATAATTGATAGCATACGCTGCGAACCCACGGAAGGGGGTCGAGGACAGTGGTG
>seq2
TCCCTCTAGAGGCTCTTTACCGTGATGCTACATCTTACAGGTATTTCTGAGGCTCTTTCA
AACAGGTGCGCGTGAACAACAACCCACGGCAAACGAGTACAGTGTGTACGCCTGAGAGTA
>seq3
GGTTCCGCTCTAAGCCTCTAACTCCCGCACAGGGAAGAGATGTCGATTAACTTGCGCCCA
TAGAGCTCTGCGCGTGCGTCGAAGGCTCTTTTCGCGATATCTGTGTGGTCTCACTTTGGT

到dictionary(name,value)对象,其中name将作为标题,value将分配给对应的序列。在

下面你可以通过两个列表找到我失败的尝试(不适用于包含1行的长序列)

^{pr2}$

如果您能给我提供如何修复它的解决方案,以及如何通过单独的函数来实现它的示例,我将不胜感激。在

谢谢你的帮助

格雷布


Tags: nametxtvalue序列解决方案核苷酸seq2seq1
2条回答

对代码的简单更正:

from collections import defaultdict #this will make your life simpler
f = open('input2.txt','r')
list=defaultdict(str)
name = ''
for line in f:
    #if your line starts with a > then it is the name of the following sequence
    if line.startswith('>'):
        name = line[1:-1]
        continue #this means skips to the next line
    #This code is only executed if it is a sequence of bases and not a name.
    list[name]+=line.strip()

更新:

因为我收到通知说这个旧的答案被否决了,所以我决定用Python3.7来展示我现在认为是正确的解决方案。转换到Python2.7只需要删除输入导入行和函数注释:

^{pr2}$

现在,我意识到OP要求的是“最简单的解决方案”,然而,既然他们在研究基因组数据,那么假设每个序列都可能非常大似乎是合理的。在这种情况下,通过将序列行收集到一个列表中,然后在最后对这些列表使用str.join方法来生成最终结果,这是有意义的。在

最好使用biopython库

from Bio import SeqIO
input_file = open("input.fasta")
my_dict = SeqIO.to_dict(SeqIO.parse(input_file, "fasta"))

相关问题 更多 >

    热门问题