从多行 FASTA 生成的多个字典值

Multiple dict values generated from multi-line FASTA

我正在尝试从 FASTA 文件生成一个序列标识符库和后续序列(分别作为键、值对),并且 运行 遇到了我的编程新手无法解决的问题' t解决。

简而言之,我的多行 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 文件的示例:

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

您的行处理逻辑应该在 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)