我有一个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
答案 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