我试图使用Bio和SeqIO打开一个包含多个序列的FASTA文件,编辑序列的名称以删除所有名称末尾的“.seq”(>;SeqID20.seq应该变成>;SeqID20),然后将所有序列写入一个新的FASTA文件,但是我得到了以下错误
AttributeError: 'str' object has no attribute 'id'
这是我开始的:
^{pr2}$但我也试过了,得到了同样的错误:
file_in ='lots_of_fasta_in_file.fasta'
file_out='new.fasta'
with open(file_out, 'w') as f_out:
with open(file_in, 'r') as f_in:
for seq_record in SeqIO.parse(f_in, 'fasta'):
name, sequence = seq_record.id, str(seq_record.seq)
# remove .seq from ID and add features
pair = [name.replace('.seq',''), sequence]
SeqIO.write(pair, file_out, 'fasta')
我想我在从列表“pair”到写入新文件时犯了一些错误,但我不确定要更改什么。任何帮助都将不胜感激!在
不是真正适合您的代码的解决方案,而是您的需要:
这个脚本假设一个正确的fasta文件。它将删除任何行末尾的所有“.seq”字符串。在一个正确的fasta文件中,只有ID行应该包含这些字符。在
发生错误的原因是}的列表/迭代器,但您只是给它提供一个类似}(注意,如果标题行中有空白,您也需要处理这个问题)。另外,最有效的方法是(跨Biopython版本)一次写入所有记录,而不是每次迭代都调用
SeqIO.write
接受SeqRecord
或{[name, sequence]
的列表。相反,我建议您只修改SeqRecord
.id
和{.write
:相关问题 更多 >
编程相关推荐