如何从FASTA的集合中制作字典?

时间:2016-02-25 18:46:16

标签: python dictionary fasta

我有一个FASTA序列的文本文件,如下所示。

我需要创建一个字典:

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

头1 \ IDNumber中

ATCGTCAG

GTCA

GTCGTA

  

HEADER2 \ idnumber2

ATTGCA

GTCA

TGCAG

到目前为止,我已经设法以这种方式将标题作为键:

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

2 个答案:

答案 0 :(得分:0)

您可以使用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')

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

答案 1 :(得分:0)

使用有序词典

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