gpt4 book ai didi

python - 迭代一系列 GenBank 基因并将每个基因的特征附加到列表中仅返回最后一个基因

转载 作者:行者123 更新时间:2023-12-01 08:12:55 25 4
gpt4 key购买 nike

我的代码有问题。我正在尝试使用 BioPython 迭代 genbank 文件的基因列表。它看起来像这样:

class genBank:
gbProtId = str()
gbStart = int()
gbStop = int()
gbStrand = int()

genBankEntries = list()

for seq_record in SeqIO.parse(genBankFile, "genbank"):
for seq_feature in seq_record.features:
genBankEntry = genBank
if seq_feature.type == "CDS":
genBankEntry.gbProtId = seq_feature.qualifiers['protein_id']
genBankEntry.gbStart = seq_feature.location.start # prodigal GFF3 output is 1 based indexing
genBankEntry.gbStop = seq_feature.location.end
genBankEntry.gbStrand = seq_feature.strand
genBankEntries.append(genBankEntry)

它看起来应该可以工作,但是当我运行它时,生成的结构genBankEntries只是一个巨大的堆栈,其大小与genbank文件中的基因数量相同,但只有最终值seq_record.features 作为每个列表元素:

00 = {type} <class '__main__.genBank'>
gbProtId = {list} ['BAA31840.1']
gbStart = {ExactPosition} 90649
gbStop = {ExactPosition} 91648
gbStrand = {int} 1
...
82 = {type} <class '__main__.genBank'>
gbProtId = {list} ['BAA31840.1']
gbStart = {ExactPosition} 90649
gbStop = {ExactPosition} 91648
gbStrand = {int} 1

这尤其令人困惑,因为两个 for 循环似乎都能正常工作:

for seq_record in SeqIO.parse(genBankFile, "genbank"):
for seq_feature in seq_record.features:
print(seq_feature)

这是为什么?

最佳答案

您永远不会创建 genBank 类的任何实例。每次循环迭代都会更改 genBank 类的类级属性,并且每次都会将相同的对象添加到列表中。每次循环都会覆盖前一次的值。

对于内部循环的第一行,添加括号以调用类型并创建 genBank 的实例。相反,它将是 genBankEntry = genBank()。这会为每个循环创建一个新的不同对象。

关于python - 迭代一系列 GenBank 基因并将每个基因的特征附加到列表中仅返回最后一个基因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55128143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com