我正在尝试在“>;”字符附加到一个列表之前创建多行,以便将其转换为字典中的值。例如,我想:
> 1
AAA
CCC
> 2
成为AAACCC。你知道吗
代码如下:
def parse_fasta(path):
with open(path) as thefile:
label = []
sequences = []
for k, line in enumerate(thefile):
if line.startswith('>'):
labeler = line.strip('>').strip('\n')
label.append(labeler)
else:
seqfix = ''.join(line.strip('\n'))
sequences.append(seqfix)
dict_version = {k: v for k, v in zip(label, sequences)}
return dict_version
parse_fasta('small.fasta')
你可以边做边编字典。这里有一个方法。你知道吗
编辑:删除了defaultdict(因此没有模块)
示例文件:
这本词典的精美印刷品是:
编辑:尝试后使用解决方案:
您将看到我做了一些更改以获得正确的输出。我添加了一个数组
total_seq
来保存每个序列头的序列。(你没有这个,这是你的解决方案中的一个问题)。代码中的joins
没有做任何事情。这个值只是一个字符串,尽管您的想法是正确的。您将在修订后的代码中看到join
将一个头id的累积序列连接到一个fasta字符字符串中。你知道吗我测试了空白行,如果行是空白的,我做了一个
continue
,(len(line) == 0
)。你知道吗有一个测试
if len(sequences) > 0
来看看是否有任何序列被发现。他们不会在第一张唱片上。它会在看到任何序列之前看到ID。你知道吗在
for
循环完成之后,有必要添加最后一个序列total_seq.append(sequences)
因为当检测到新的ID时,除了最后一个序列之外的所有其他序列都被添加到总序列中。你知道吗
我希望这个解释是有帮助的,因为它更接近您的代码。你知道吗
相关问题 更多 >
编程相关推荐