更换所有信件的实例在FASTA比文件的列

问题描述 投票:2回答:1

我写一个脚本,可以取代所有的氨基酸残基的实例在FASTA对准文件的列。使用AlignIO,我只是可以读取校准文件,并从中提取信息,但我不能修改它们的DNA序列。此外,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个回答
2
投票

这是一个很好的问题,我觉得你在做什么用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全在一起:

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)
© www.soinside.com 2019 - 2024. All rights reserved.