遍历一系列GenBank基因并将每个基因的特征添加到一个列表中,只返回最后一个gen

2024-05-16 21:47:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码有问题。我正试着用生物毒素遍历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\u 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)

为什么会这样


Tags: inforrecordseqfeatureclassintgenbank
1条回答
网友
1楼 · 发布于 2024-05-16 21:47:37

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

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

相关问题 更多 >