从多行FASTA

时间:2018-09-10 00:19:41

标签: python dictionary fasta

我正试图从FASTA文件中生成序列标识符和后续序列(分别作为键,值对)的库,并且遇到了我的新手编程大脑无法解决的问题。

简而言之,我的多行FASTA文件(如下所示)被存储为每个键的多个值。 FASTA文件中的每个新行都会产生一个新值,而不是将整个序列存储为每个序列标识符的单个值。

下面是我的代码,下面是我要从中提取的示例FASTA文件。关于如何将整个序列存储为单个值而不是多个值的任何帮助都将有所帮助!看来我还有很多书要继续做...

在此先感谢您的帮助!

import sys
sequence = ''
fasta = {}
def seqs_from_file(filename):
    with open(filename) as f:
        for line in f:
            line = line.rstrip("\n")
        if not line:
            continue
        if line.startswith(">"):
            seq_name = line[1:]
            if seq_name not in fasta:
                fasta[seq_name] = []
            continue
        sequence = line
        fasta[seq_name].append(sequence)
print(fasta) # printing here is just so I can see if my dict. was correctly made

FASTA文件中的Ex:

>646311950
ATGAATAATCGAGTCCACCAGGGCCACTTAGCCCGTAAACGCTTCGGGCA
AAACTTTCTCAACGATCAGTTCGTGATCGACAGTATTGTGTCTGCCATTA
ACCCGCAAAAGGGCCAGGCGATGGTCGAAATCGGCCCCGGTCTGGCGGCA
TTGACCGAACCGGTCGGCGAACGTCTGGACCAGCTGACGGTCATCGAACT
TGACCGCGATCTGGCGGCACGTCTGCAAACGCATCCATTCTTAGGCCCGA
AACTGACGATTTATCAGCAGGATGCGATGACCTTTAACTTTGGTGAACTG
GCCGAGAAAATGGGTCAGCCGCTGCGTGTTTTCGGCAACCTGCCTTATAA
CATCTCCACGCCGTTGATGTTCCATCTGTTTAGCTATACTGATGCCATTG
CCGACATGCACTTTATGTTGCAAAAAGAGGTGGTGAATCGTCTGGTTGCA
GGACCGAACAGCAAAGCGTATGGTCGATTAAGCGTCATGGCGCAATACTA
TTGCAATGTGATCCCGGTACTGGAAGTACCGCCGTCAGCCTTTACACCAC
CACCCAAAGTGGATTCCGCCGTCGTGCGCCTGGTTCCTCATGCAACGATG
CCTCACCCGGTTAAAGATGTTCGTGTGTTGAGCCGCATCACCACCGAAGC
CTTTAACCAGCGTCGTAAAACCATTCGTAACAGCCTCGGCAACCTGTTTA
GCGTCGAGGTGTTAACGGGAATGGGGATCGACCCGGCGATGCGAGCGGAA
AATATCTCTGTCGCGCAATATTGCCAGATGGCGAACTATCTGGCGGAGAA
CGCGCCTTTGCAGGAGAGTTAA

1 个答案:

答案 0 :(得分:0)

您应将行处理逻辑缩进for循环内,而不是将sequence作为列表附加到fasta[seq_name]上,而应将sequence连接到它作为字符串,如果您希望它是一个值:

import sys
sequence = ''
fasta = {}
def seqs_from_file(filename):
    with open(filename) as f:
        for line in f:
            line = line.rstrip("\n")
            if not line:
                continue
            if line.startswith(">"):
                seq_name = line[1:]
                if seq_name in fasta:
                    fasta[seq_name].append('')
                else:
                    fasta[seq_name] = ['']
                continue
            sequence = line
            fasta[seq_name][-1] += sequence
    print(fasta)