|
发表于 2023-12-1 10:54:30
|
显示全部楼层
当你将`m`中的行按照分号(;)进行分割后,得到的是一个属性列表。如果某个属性中包含了关键字'exon',那么通过count方法计算得到的结果可能会多于实际的'exon'出现次数。这是因为'exon'可能在属性中出现多次,而count方法会将每次出现都计数。
例如,假设属性列表为`['ID=Contig001288_ERROPOS3153804__exon_45928_46049', 'Parent=OeCYP51G64a.1', 'Parent_Accession=GWHTAOPM050481', '', 'transl_table=1']`,其中第一个属性即为'exon'。如果使用count方法计算'exon'的出现次数,会得到2,但实际上只有一个'exon'。
为了避免重复计数,你可以使用set数据结构来存储'exon',这样每个'exon'只会被计算一次。修改代码如下所示:
- a = open('.\\测试.txt')
- b = open('.\\测试1.txt')
- c = open('.\\数量1.txt', 'w')
- gff = a.readlines()
- cyp = b.readlines()
- shul = []
- for i in cyp:
- d = ''
- exons = set() # 使用set存储'exon'
- p450 = i.strip()
- for m in gff:
- if p450 in m:
- attrs = m.strip().split(';')
- for attr in attrs:
- if 'exon' in attr:
- exons.add(attr) # 将'exon'添加到set中
- d = p450 + '\t' + str(len(exons)) + '\t' + str(len(exons)-1) + '\n'
- shul.append(d)
- c.writelines(shul)
- a.close()
- b.close()
- c.close()
复制代码
现在,计算'exon'的次数时,只会计算不重复的'exon',避免了重复计数的问题。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。 |
|