python - 替换 FASTA 对齐文件列中的所有字母实例
问题描述
我正在编写一个脚本,它可以替换 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)
推荐阅读
- azure-pipelines - 如何停止从 Azure 中的 TFVC 存储库签出开发服务器管道?
- javascript - 在 parseFloat() 之后添加小数位的最快方法,类似于 Python 的 float()
- python - dask.dataframe.read_csv 无法访问网络服务器上的文件
- spring-boot - VisualVm:cpu 图形面板显示“此 JVM 不支持”
- c - c 迭代时出错:使用未声明的标识符 i
- javascript - 我有 2 个 javascript 文件。如何将它们捆绑到一个文件中并将所有代码包含在一个封闭的范围内?
- php - 在 PHP 文件中将 cURL 与 Google Apps Script Web App 一起使用时遇到问题
- php - 如何使它选择