python - 替换 FASTA 比对文件列中字母的所有实例

标签 python bioinformatics biopython fasta sequence-alignment

我正在编写一个脚本,它可以替换 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

最佳答案

这是一个很好的问题,我认为您使用 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)

关于python - 替换 FASTA 比对文件列中字母的所有实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54482944/

相关文章:

Perl递归技术?

python - 如何计算具有多种模型/构象的蛋白质的平均结构

javascript - 如何将 python 变量发送到 javascript? python是cgi脚本吗?

python - PeeWee 对整数值进行排序,就好像它们是字符串一样

python - 将多个 NumPy 数组写入单独列中的 CSV 文件?

python - 使用Bio.SeqIO编写单行FASTA

python - 是否有一个函数可以根据比对参数计算比对序列的分数?

python - Unicode解码错误: 'ascii' codec can't decode byte 0x87 in position 10: ordinal not in range(128)

perl - 如何运行 Bismark 亚硫酸氢盐测序程序?

docker - Snakemake 奇点与本地资源/关于 Snakemake 与 --use-singularity 的问题