【问题标题】:Multiple dict values generated from multi-line FASTA从多行 FASTA 生成的多个 dict 值
【发布时间】:2018-09-10 08:42:21
【问题描述】:

我正在尝试从 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 文件的示例:

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

【问题讨论】:

    标签: python dictionary fasta


    【解决方案1】:

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

    【讨论】:

    • 我仍然为 FASTA 文件中的每个新行获取一个新的字典值。不过,感谢您对 For 循环构造的额外输入。
    猜你喜欢
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 2019-02-18
    相关资源
    最近更新 更多