>im 尝试将 .fasta 文件作为字典读取并分别提取标头和序列。文件中有多个标头和序列。 下面是一个示例。
header= CMP12
sequence=agcgtmmnngucnncttsckkld
但是当我尝试使用函数读取 fasta 文件时 read_f 并使用 print(dict.keys((( 对其进行测试时,我得到一个空列表。
def read_f(fasta):
'''Read a file from a FASTA format'''
dictionary = {}
with open(fasta) as file:
text = file.readlines()
print(text)
name=''
seq= ''
#Create blocks of fasta text for each sequence, EXCEPT the last one
for line in text:
if line[0]=='>':
dictionary[name] = seq
name=line[1:].strip()
seq=''
else: seq = seq + line.strip()
yield name,seq
fasta= ("sample.prot.fasta")
dict = read_f(fasta)
print(dict.keys())
这是我得到的错误:
'generator' object has no attribute 'keys'
使用yield
关键字意味着当您调用函数read_fasta
时,该函数不会执行。相反,将返回一个生成器,您必须迭代此生成器以获取函数生成的元素。
具体来说,用dict = read_fasta(*fasta)
替换dict = read_fasta(fasta)
应该可以完成这项工作(*是拆包的操作员(。
正如Iguananaut已经提到的,Bipython可以帮助你。(需要安装生物蟒蛇软件包( 参见Biopython"序列文件到字典">
from Bio import SeqIO
fasta= "sample.prot.fasta"
seq_record_dict = SeqIO.to_dict(SeqIO.parse(fasta, "fasta"))