遍历一系列 GenBank 基因并将每个基因的特征附加到列表 returns 只有最后一个基因
Iterating through a series of GenBank genes and appending each gene's features to a list returns only the last gene
我的代码有问题。我正在尝试使用 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
class 的任何实例。每个循环迭代都会更改 genBank
class 的 class 级属性,并且您每次都将相同的对象添加到列表中。每次通过循环都会覆盖上一次循环中的值。
对于内部循环的第一行,添加括号以调用类型并创建 genBank
的实例。它将改为 genBankEntry = genBank()
。这会为每个循环创建一个新的不同对象。
我的代码有问题。我正在尝试使用 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
class 的任何实例。每个循环迭代都会更改 genBank
class 的 class 级属性,并且您每次都将相同的对象添加到列表中。每次通过循环都会覆盖上一次循环中的值。
对于内部循环的第一行,添加括号以调用类型并创建 genBank
的实例。它将改为 genBankEntry = genBank()
。这会为每个循环创建一个新的不同对象。