【发布时间】:2022-01-10 04:00:34
【问题描述】:
我正在尝试在 python 中创建一个函数,该函数从 fasta 文件中读取明确和不明确的核苷酸序列并返回序列 ID 和分子量。
我尝试了以下代码:
import Bio
from Bio import SeqUtils, SeqIO
def function(filename):
nucleotides ={'A','T', 'C', 'G'}
with open(filename) as file:
for record in SeqIO.parse(file, "fasta"):
for nucl in record:
if nucl in nucleotides:
continue
else:
print(str(record.id)+": is ambiguous")
break
else:
mol_weight= Bio.SeqUtils.molecular_weight(record)
print(str(record.id)+": is unambiguous & molecular weight = "+str(mol_weight))
function("random.fasta")
如果我在模棱两可的序列上使用这段代码,绝对没有问题,我会得到我想要的结果。但是,如果我包含明确的序列,我会得到 "ValueError: 'I' is not a valid unambiguous letter for DNA" 由 'Bio.SeqUtils.molecular_weight(record)' 函数引起,在我看来'没有意义,因为如果我正确理解,字母 'I' 通常会导致第一个 else 语句中的中断。
我还使用了一个自定义函数来手动计算分子量(基于固定值),在这种情况下没有错误,并且该函数对于模棱两可和明确的序列都很好。然而有人指出,我的手动计算不如内置函数准确。
我对 Python 有点陌生,但我希望有人知道为什么 ValueError 仍然会出现以及如何解决它。
【问题讨论】:
-
我修复了函数体的缩进 - 在表单中粘贴代码时很容易出错。我还包括了使代码运行所需的导入 - 所需要的只是一个有效的 fasta 文件。
标签: python sequence biopython fasta