【问题标题】:Replacing all of instances of a letter in a column of a FASTA alignment file替换 FASTA 对齐文件列中的所有字母实例
【发布时间】:2019-02-01 15:57:42
【问题描述】:

我正在编写一个脚本,它可以替换 FASTA 比对文件列中的所有氨基酸残基实例。使用 AlignIO,我只能读取一个对齐文件并从中提取信息,但我无法修改它们的序列。此外,MutableSeq 模块只能修改字符串序列,如果我使用 seq 对象输入,它不能修改它。 我想找一个模块或方法来修改对齐文件并保存它,而它在AlignIO的结构中作为后续过程的序列对象。

我的代码只使用了 AlignIO:

alignment = AlignIO.read(input_handle, "fasta")
for record in alignment:
    if record.seq[10] == "G":
        record.seq[10] = "T"

输出:

record.seq[10] = "T"
TypeError: 'Seq' object does not support item assignment

我的代码同时使用了 AlignIO 和 MutableSeq:

alignment = AlignIO.read(input_handle, "fasta")
for record in alignment[0:1, : ]:
    mut_align = MutableSeq(record.seq)
    mut_align.__delitem__(10)
    mut_align.insert(10, "T")
    print(mut_align)

输出:

del self.data[index]
TypeError: 'Seq' object doesn't support item deletion

【问题讨论】:

    标签: python bioinformatics biopython fasta sequence-alignment


    【解决方案1】:

    这是一个很好的问题,我认为您对 MutableSeq 所做的事情应该会立即奏效或失败,但这里有一个解决方法:

    from Bio import AlignIO
    
    alignment = AlignIO.read('test.fasta', 'fasta')
    for record in alignment:
        record.seq = record.seq.tomutable()
        if record.seq[2] == "G":
            record.seq[2] = "T"
        print(record)
    

    输出:

    ID: 1
    Name: 1
    Description: 1
    Number of features: 0
    MutableSeq('ATTAG')
    ID: 2
    Name: 2
    Description: 2
    Number of features: 0
    MutableSeq('AATAG')
    

    对于输入数据:

    $ cat test.fasta 
    >1
    ATGAG
    >2
    AAGAG
    

    我认为 MutableSeq 对象是从您的示例中的 Seq 对象创建的,但该方法作为错误失败,我在此处提交:https://github.com/biopython/biopython/issues/1918


    如果你想避免使用MutableSeq all-together,这是另一个相当低效的解决方法,每次都重新构建字符串:

    alignment = AlignIO.read('test.fasta', 'fasta')
    for record in alignment:
        if record.seq[2] == "G":
            record.seq = record.seq[:2] + 'T' + record.seq[3:]
        print(record)
    

    【讨论】:

    • 感谢您的回答。不过,我相信应该有针对这个问题的Biopython函数或方法!我觉得太明显了,人们需要修改对齐文件,被Biopython忽略了!
    • @RezaRezaei 查看我编辑的答案,我提供了一个解决方法并向 Biopython 提出了问题
    • 感谢编辑后的答案,并将问题提交给 Biopython。我想我会使用你先写的 without MutableSeq 方法。
    猜你喜欢
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 2017-02-06
    • 2011-06-30
    • 2020-01-01
    相关资源
    最近更新 更多