【问题标题】:AttributeError: 'str' object has no attribute 'id' using BioPython, parsing fastaAttributeError:'str'对象没有属性'id'使用BioPython,解析fasta
【发布时间】:2018-12-31 11:06:11
【问题描述】:

我正在尝试使用 Bio 和 SeqIO 打开一个包含多个序列的 FASTA 文件,编辑序列的名称以删除所有名称末尾的“.seq”,(>SeqID20.seq 应该变成 > SeqID20),然后将所有序列写入新的 FASTA 文件,但出现以下错误

AttributeError: 'str' object has no attribute 'id'

这是我开始的:

with open ('lots_of_fasta_in_file.fasta') as f:
    for seq_record in SeqIO.parse(f, 'fasta'):
        name, sequence = seq_record.id, str(seq_record.seq)
        pair = [name.replace('.seq',''), sequence]
        SeqIO.write(pair, "new.fasta", "fasta")

但我也试过这个并得到同样的错误:

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')

我假设我在从列表“对”写入新文件时出现了一些错误,但我不确定要更改什么。任何帮助将不胜感激!

【问题讨论】:

  • 知道哪个是失败的行会很有用...这是name, sequence = seq_record.id, str(seq_record.seq)吗?

标签: python python-3.x bioinformatics biopython fasta


【解决方案1】:

您的错误发生是因为SeqIO.write 接受SeqRecordSeqRecords 的列表/迭代器,但您只提供了一个类似[name, sequence] 的列表。相反,我建议您只修改 SeqRecord .id.description (注意,如果标题行中有空白,您也需要处理此问题)。此外,一次写入所有记录是最有效的(跨 Biopython 版本),而不是每次迭代都调用 .write

from Bio import SeqIO

def yield_records():
    with open('lots_of_fasta_in_file.fasta') as f:
        for seq_record in SeqIO.parse(f, 'fasta'):
            seq_record.id = seq_record.description = seq_record.id.replace('.seq','')
            yield seq_record

SeqIO.write(yield_records(), 'new.fasta', 'fasta')

【讨论】:

    【解决方案2】:

    不是您的代码的真正解决方案,而是您的需要:

    sed 's/\.seq$//' lots_of_fasta_in_file.fasta > new.fasta
    

    此脚本假定一个正确的 fasta 文件。它将删除任何行末尾的所有“.seq”字符串。而在适当的 fasta 文件中,只有 ID 行应该包含这些字符。

    【讨论】:

    • 这真是太好了!我有此信息的其他用途,所以感谢您的评论!
    猜你喜欢
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 2021-10-04
    • 2019-12-02
    • 2021-09-25
    • 2014-03-04
    相关资源
    最近更新 更多