我如何用 collection 的 FASTA 制作字典?

How do I make a dictionary out of a collection of FASTA?

我有一个包含 FASTA 个序列的文本文件,看起来像这样。

我需要创建一个字典,上面写着:

{header1\id number1: "ATCGTCAGGTCAGTCGTA", header2\idnumber2: "ATTGCAGTCATGCAG"}

header1\idnumber

ATCGTCAG

GTCA

GTCGTA

header2\idnumber2

ATTGCA

GTCA

TGCAG

等等

到目前为止,我已经设法以这种方式将我的 header 作为密钥:

file1 = open("test.txt")
sequence = []
text = []
for line in file1:
    text.append(line.rstrip('\n'))
dic = {}
for thing in text:
    if thing[0]=='>':
        dic[thing] = ""

print dic

但我不知道如何进一步加入序列并将它们作为值放在适当的键下

编辑:文本文件的实际部分:

FASTA658_B CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCT ATATCCATTTGTCAGCAGACACGC

TEK1-3586_CD CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGAC TGGGAACCTGCGGGCAGTAGGTGGAAT

您可以使用 defaultdict() 来更轻松地添加值

from collections import defaultdict

d = defaultdict(str)

with open('file') as file1:
    for line in file1:
        if line[0] == '>': #I'm assuming header/idnumber starts with '>'
            key = line.strip('\n')
        else:
            d[key] += line.strip('\n')

键之间的每一行都是要添加到字典中的值。去除换行符并将其添加到字典中的值。该行是否只是换行并不重要,因为一旦换行被剥离,它就不会向字符串添加任何内容

使用有序字典

from collections import OrderedDict
import re
import string

bad_chars = '\n>'
rgx = re.compile('[%s]' % bad_chars)
data = OrderedDict()
with open('test.txt', 'r') as f:
    for line in f:
        if line.startswith('>'):
            data[line.translate(string.maketrans("", "", ), bad_chars)] = ''
        else:
            data[data.keys()[-1]] += line.strip('\n')

print data